5.7.1.1 单体内置对象

  ECMA-262对内置对象的定义是:“有ECMAScript实现提供的,不依赖于宿主环境的对象,这些对象在ECMAScript程序中执行之前就已经存在了。”意思就是说,开发人员不必显式的实例化内置对象,因为它们已经实例化了。

  Global对象

  Global(全局)对象可以说是ECMAScript中最特别的一个对象了,因为不管你从什么角度上看,这个对象都是不存在的。ECMAScript中的Global对象在某种意义上是作为一个终极的“兜底儿对象”来定义的。换句话讲,不属于任何其他对象的属性和方法,最终都是它的属性和方法。事实上,没有全局变量或全局函数;所有在全局作用域中定义的属性和函数,都是Global对象的属性。

  URL编码方法

  Global对象的encodeURI()和encodeURIComponent()方法可以对URI(Uniform Resource Identifiers,通用资源标识符)进行编码,以便发送给送浏览器。有效的URI中不能包含某些字符,例如空格。而这两个URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字符,而从让浏览器能够接受和理解。

  其中,encodeURI()主要用于整个URI,而encodeURIComponent()主要用于对URI中的某一段进行编码。它们的主要区别在于,encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而encodeURIComponent()则会对它发现的任何非标准字符进行编码。

  使用encodeURI()编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20。而encodeURIComponent()方法则会使用对应的编码替换所有非字母数字字符。这也正是可以对整个URI使用encodeURI(),而只能对附加现有的URI后面的字符串使用encodeURIComponent()的原因所在。

  注:一般来数,我们使用encodeURIComponent()方法的时候要比使用encodeURI()更多,因为在实践中更常见的是对查询字符串参数而不是对基础URI进行编码。

  与encodeURI()和encodeURIComponent()方法对应的两个方法分别是decodeURI()和decodeURIComponent()。其中,decodeURI()只能对使用的encodeURI()替换的字符进行解码。例如,它可以将%20替换成一个空格,但不会对%23座任何处理,因为%23表示井号(#),而井号不是使用encodeURI()替换的。同样的,decodeURIComponent()能够解码使用encodeURIComponent()编码的所有字符,即它可以解码任何特殊字符的编码。

  注:URI方法encodeURI()、encodeURIComponent()、decodeURI()和decodeURIComponent()用于替换已经被ECMA-262第3版废弃的escape()和unescape()方法。URI方法能够编码所有Unicode字符,而原来的方法只能正确的编码ASCII字符。因此在开发实践中,特别是在产品级的代码中,一定要使用URI方法,不要使用escape()和unescape()方法;

原文地址:https://www.cnblogs.com/yxlove/p/4540937.html