本文介绍 ECMAScript 中的 Global 内置对象,指出其虽不存在但包含所有全局函数。详细解析 escape、encodeURI、encodeURIComponent 等编码方法的非编码字符差异及适用场景,并对比解码方法。重点说明 eval 的强大功能与代码注入风险,最后列举 Global 对象的属性及构造函数。
Global 对象概述
定义:由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现。
由定义可知开发者不必明确实例化内置对象,它已被实例化了。在 ECMAScript-262 只定义了两个内置对象,即 Global 和 Math
Global
Global 对象是 ECMAScript 中最特别的对象,因为实际上它根本不存在。
由于在 ECMAScript 中不存在独立的对象,所有函数都必须是某个对象的方法,如前面提到的 isNaN()、isFinite()、parseInt() 和 parseFloat() 等,都是 Global 对象的方法。
Global 对象的方法
escape()、encodeURI()、encodeURIComponent()、unescape()、decodeURI()、decodeURIComponent()、eval() 等都是 Global 的方法。
escape() && encodeURI() && encodeURIComponent()
字符串编码方法
这几个方法用于对字符串进行编码。
escape 不编码字符有 69 个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI 不编码字符有 82 个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent 不编码字符有 71 个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
escape():不建议用,已淘汰
encodeURI():对 URL 进行编码,示例:
代码如下:
encodeURI("https://www.jb51.net/a file with spaces.html")
// outputs https://www.jb51.net/a%20file%20with%20spaces.html encodeURIComponent():对参数进行编码,示例:
代码如下:
param1 = encodeURIComponent("http://xyz.com/?a=12&b=55")
url ="http://domain.com/?param1="+ param1 +"¶m2=99";
// outputs http://www.domain.com/?param1=http%3A%2F%Fxyz.com%F%Ffa%3D12%26b%3D55¶m2=99 unescape() && decodeURI() && decodeURIComponent()
字符串解码方法
这几个方法用于对字符串进行解码。
eval()
eval 方法与风险
eval() 可能是 ECMAScript 语言中最强大的方法,该方法就像整个 JavaScript 的解释程序,接受一个参数,即要执行的 ECMAScript(或 JavaScript) 字符串。
示例:
代码如下:
var msg="Hello world";
eval("alert(msg)");//alert "Hello world" 注意,eval() 功能很强大,但也很危险,特别在用 eval 执行用户输入的内容时,可能会被代码注入。
Global 对象的所有属性
Global 对象的属性
Global 不只有方法,它还有属性,Global 对象的所有属性:
|
属性 |
说明 |
|
undefined |
Undifined类型的字面量 |
|
NaN |
非数的专用数值 |
|
Infinity |
无穷大值的专用数值 |
|
Object |
Object的构造函数 |
|
Array |
Array 的构造函数 |
|
Function |
Function 的构造函数 |
|
Boolean |
Boolean 的构造函数 |
|
String |
String 的构造函数 |
|
Number |
Number 的构造函数 |
|
Date |
Date 的构造函数 |
|
RegExp |
RegExp 的构造函数 |
|
Error |
Error 的构造函数 |
|
EvalError |
EvalError 的构造函数 |
|
RangeError |
RangeError 的构造函数 |
|
ReferenceError |
ReferenceError 的构造函数 |
|
SyntaxError |
SyntaxError 的构造函数 |
|
TypeError |
TypeError 的构造函数 |
|
URIError |
URIError 的构造函数 |
作者:天行健,自强不息
出处:http://artwl.cnblogs.com