3、引用类型(5)(《JS高级》笔记)

2017-04-21  本文已影响25人  yjaal

七、单体内置对象

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 舍入方法

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数到109个数,因此可能值的总数就是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.Enum次幂 Math.atan(x) 返回x的反正切值
Math.log(num) 返回num的自然对数 Math.atan2(y, x) 返回y/x的反正切值
Math.pow(num, power) 返回numpower次幂值 Math.cos(x) 返回x的余弦值
Math.sqrt(num) 返回num的平方根 Math.sin(x) 返回x的正弦值
Math.acos(x) 返回x的反余弦值 Math.tan(x) 返回x的正切值
上一篇下一篇

猜你喜欢

热点阅读