3、引用类型(5)(《JS高级》笔记)
七、单体内置对象
7.1 Global对象
实际上,没有全局变量或全局函数;所有在全局作用域中定义的属性和函数,都是此对象的属性。
7.1.1 URI 编码方法
Global
对象的encodeURI()
和encodeURIComponent()
方法可以对URI
进行编码,以便发送给浏览器。前者主要用于整个URI
,而后者主要用于对URI中的某一段进行编码。主要区别在于,前者不会对本身属于URI
的特殊字符进行编码,如冒号、正斜杠、问号和井字号;而后者则会对它发现的任何非标准字符进行编码。
var uri = "http://www.wrox.com/illegal value.htm#start";
//"http://www.wrox.com/illegal%20value.htm#start"
alert(encodeURI(uri));
//"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));
说明:上述两个方法是对URI
进行编码,对应的方法decodeURI()、decodeURIComponent()
方法则是对URI
进行解码。
7.1.2 eval()方法
此方法就是一个完整的ECMAScript
解析器,它只接受一个参数,即要执行的Javascript
字符串。如下面两行代码就是等价的:
eval("alert('hi')");
alert('hi');
当解析器发现代码中调用此方法时,它会将传入的参数当作实际的ECMAScript
语句来解析,然后把执行结果插入到原位置。通过此方法执行的代码被认为是包含该次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链。这意味着通过此方法可以引用在包含环境中定义的变量:
var msg = "hello world";
eval("alert('msg ')");//"hello world"
同样我们可以在此方法调用中定义一个函数,然后在该调用的外部代码中引用这个函数:
eval("function sayHi(){ alert('hi');}");
sayHi();
但是注意,严格模式下,在外部访问不到此方法中创建的任何变量或函数。
7.1.3 Global对象的属性
属性 | 说明 | 属性 | 说明 |
---|---|---|---|
undefined |
特殊值undefined
|
Date |
构造函数Date
|
NaN |
特殊值NaN
|
RegExp |
构造函数RegExp
|
Infinity |
特殊值Infinity
|
Error |
构造函数Error
|
Object |
构造函数Object
|
EvalError |
构造函数EvalError
|
Array |
构造函数Array
|
RangeError |
构造函数Date
|
Function |
构造函数Function
|
ReferenceError |
构造函数ReferenceError
|
Boolean |
构造函数Boolean
|
SyntaxError |
构造函数SyntaxError
|
String |
构造函数String
|
TypeError |
构造函数TypeError
|
Number |
构造函数Number
|
URIError |
构造函数URIError
|
注意:ECMAScript 5
明确禁止给undefined、NaN、Infinity
赋值,这样做即使在非严格模式下也会导致错误。
7.1.4 window对象
我们虽然没有之处如何直接访问Global
对象,但Web
浏览器都是将这个全局对象作为window
对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了window
对象的属性。
var color = "red";
function sayColor(){
alert(window.color);
}
window.sayColor(); //"red"
说明:这是一种访问Global
对象的方法,另一种取得Global
对象的方法如下:
var global = function(){
return this;
}();
以上代码创建了一个立即调用的函数表达式,返回this
的值。如前所述,在没有给函数明确指定this
值的情况下(无论是通过将函数添加为对象的方法,还是通过调用call()
或apply()
),this
值等于Global
对象。而像这样通过简单地返回this
来取得Global
对象,在任何执行环境下都是可行的。
7.2 Math对象
7.2.1 Math对象的属性
属性 | 说明 |
---|---|
Math.E |
自然对象的底数,即常量e 的值 |
Math.LN10 |
10 的自然对数 |
Math.Ln2 |
2 的自然对数 |
Math.LOG2E |
以2 为底e 的对数 |
Math.LOG10E |
以10 为底e 的对数 |
Math.PI |
π 的值 |
Math.SQRT1_2 |
1/2 的平方根 |
Math.SQRT2 |
2 的平方根 |
7.2.2 min()和max()方法
这两个方法用于确定一组数值中的最小值和最大值。
7.2.3 舍入方法
-
Math.ceil()
执行向上舍入,即它总是将数值向上舍入为最接近的整数; -
Math.floor()
执行向下舍入,即它总是将数值向下舍入为最接近的整数; -
Math.round()
执行标准舍入,即它总是将数值四舍五入为最接近的整数;
alert(Math.ceil(25.9)); //26
alert(Math.ceil(25.5)); //26
alert(Math.ceil(25.1)); //26
alert(Math.round(25.9)); //26
alert(Math.round(25.5)); //26
alert(Math.round(25.1)); //25
alert(Math.floor(25.9)); //25
alert(Math.floor(25.5)); //25
alert(Math.floor(25.1)); //25
7.2.4 random()方法
此方法返回大于等于0
小于1
的一个随机数。这里如果我们需要一个从2
数到10
要9
个数,因此可能值的总数就是9
,而第一个可能的值就是2
。多数情况下,其实都可以通过一个函数来计算可能值的总数和第一个可能的值,例如:
function selectFrom(lowerValue, upperValue) {
var choices = upperValue - lowerValue + 1;
return Math.floor(Math.random() * choices + lowerValue);
}
var num = selectFrom(2, 10);
alert(num); //number between 2 and 10 (inclusive)
7.2.5 其他方法
方法 | 说明 | 方法 | 说明 |
---|---|---|---|
Math.abs(num) |
返回num 的绝对值 |
Math.asin(x) |
返回x 的反正弦值 |
Math.exp(num) |
返回Math.E 的num 次幂 |
Math.atan(x) |
返回x 的反正切值 |
Math.log(num) |
返回num 的自然对数 |
Math.atan2(y, x) |
返回y/x 的反正切值 |
Math.pow(num, power) |
返回num 的power 次幂值 |
Math.cos(x) |
返回x 的余弦值 |
Math.sqrt(num) |
返回num 的平方根 |
Math.sin(x) |
返回x 的正弦值 |
Math.acos(x) |
返回x 的反余弦值 |
Math.tan(x) |
返回x 的正切值 |