单体内置对象
在所有代码执行之前,作用域中就已经存在两个内置对象:Global
和 Math
。
Global对象
不属于任何其他对象的属性和方法,最终都是它的属性和方法。事实上,没有全局变量或全局函数;所有在全局作用域中定义的属性和函数,都是 Global
对象的属性。如 isNaN()
、isFinite()
、parseInt()
以及 parseFloat()
,实际上全都是 Global
对象的方法。
URI编码方法
encodeURI():主要用于整个 URI(例如,http://www.wrox.com/illegal value.htm),不会对本身属于 URI 的特殊字符进行编码,例如冒号、正斜杠、 问号和井字号;
encodeURIComponent():主要用于对 URI 中的某一段(例如前面 URI 中的 illegal value.htm)进行编码,会对它发现的任何非标准字符进行编码。;
两者区别,正是对整个 URI 使用
encodeURI()
,而只能对附加在现有 URI 后面的字符串使用encodeURIComponent()
的原因所在。使用encodeURIComponent()
方法的时候要比使用encodeURI()
更多,因为在实践中更常见的是对查询字符串参数而不是对基础 URI 进行编码。decodeURI():只能对使用
encodeURI()
替换的字符进行解码;decodeURIComponent():只能对使用
encodeURIComponent()
替换的字符进行解码;
eval()方法
eval()
方法就像是一个完整的ECMAScript解析器,它只接受一个参数,即要执行的ECMAScript或(JavaScript)字符串。
函数 sayHi()
是在 eval()
内部定义的。但由于对 eval()
的调用最终会被替换成定义函数的实际代码,因此可以在下一行调用 sayHi()
,对于变量也一样; eval()
中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字 符串中;它们只在 eval()
执行的时候创建; 严格模式下,在外部访问不到 eval()
中创建的任何变量或函数,因此前面两个例子都会导致错误。在严格模式下,为 eval
赋值也会导致错误; 使用 eval()
时必须极为谨慎,特别是在用它执行用户输入数据的情况下。否则,可能会有恶意用户输入危险代码(即所谓的代码注入)。
Global对象的属性
window对象
ECMAScript 虽然没有指出如何直接访问 Global
对象,但 Web 浏览器都是将这个全局对象作为 window
对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window
对象的属性。
window
对象详见第八章。
Math对象
为保存数学公式和信息提供了一个公共位置,即 Math
对象。
Math对象的属性
min()和 max()方法
min()
和 max()
方法用于确定一组数值中的最小值和最大值。这两个方法都可以接收任意多个数值参数;这两个方法经常用于避免多余的循环和在 if
语句中确定一组数的最大值。
找到数组中的最大值或最小值,可以使用 apply
这个技巧的关键是把 Math
对象作为 apply()
的第一个参数,从而正确地设置 this
值。然后,可以将任何数组作为第二个参数。
舍入方法
Math.ceil() 执行向上舍入,即它总是将数值向上舍入为最接近的整数;
Math.floor() 执行向下舍入,即它总是将数值向下舍入为最接近的整数;
Math.round() 执行标准舍入,即它总是将数值四舍五入为最接近的整数;
random()方法
Math.random()
方法返回大于等于 0 小于 1 的一个随机数。套用下面的公式,可以从某个整数范围内随机选择一个值。
其他方法
Last updated