Global对象
Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在。
例如:
尝试编写下面的代码。将得到错误(错误消息显示Global不是对象):
var pointer = Global;
需要理解的是:
在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。如:isNaN()、isFinite()、parseInt()和parseFloat()等,这些看起来都像独立的函数,实际上,它们都是Global对象的方法。
Global对象不只有方法,还有属性。如undenfined、NaN和Infinity等都是Global对象的属性。此外,所有本地对象的构造函数也都是Global对象的属性。
Global对象的所有属性:
属性 | 说明 |
undenfined | Undenfined类型的字面量 |
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的构造函数 |
扩展:
eval()方法:
该方法可能是ECMAScript中最强大的方法,该方法就像整个ECMAScript的解释程序,接受一个参数,即要执行的ECMAScript(或JavaScript)字符串。
如:
eval(“alert(‘hi’)”);
等价于alert(“hi”);
//当解释程序发现eval()调用时,它将把参数解释为真正的ECMAScript语句,然后把它插入该函数所在的位置。这意味着:
(1)eval()调用内部引用的变量可在参数以外定义:
var msg = “hello world”;
eval(“alert(msg)”);
//这里变量msg是在eval()调用的环境外定义的,而警告仍然显示的是文本“hello world”,因为第二行代码将被替换为一行真正的代码。
(2)同样,可以在eval()调用内部定义函数或变量,然后在函数外的代码中引用:
eval(“function sayHi() { alert(‘hi’); }”);
sayHi();
//这里,函数sayHi()是在eval()调用内部定义的。因为该调用将被替换为真正的函数,所以仍可在接下来的一行中调用sayHi()
扩展:
使用eval()时要极度小心,尤其在给它传递用户输入端数据时。恶意的用户可能会插入对站点或应用程序的安全性有危害的值(叫做代码注入)