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