5.7 單體內(nèi)置對(duì)象 133
1
2
3
4
5
13
6
7
8
9
10
11
12
eval(\"var msg = 'hello world'; \");
alert(msg); //\"hello world\"
在 eval()中創(chuàng)建的任何變量或函數(shù)都不會(huì)被提升,因?yàn)樵诮馕龃a的時(shí)候,它們被包含在一個(gè)字
符串中;它們只在 eval()執(zhí)行的時(shí)候創(chuàng)建。
嚴(yán)格模式下,在外部訪問(wèn)不到 eval()中創(chuàng)建的任何變量或函數(shù),因此前面兩個(gè)例子都會(huì)導(dǎo)致錯(cuò)誤。
同樣,在嚴(yán)格模式下,為 eval 賦值也會(huì)導(dǎo)致錯(cuò)誤:
\"use strict\";
eval = \"hi\"; //causes error
能夠解釋代碼字符串的能力非常強(qiáng)大,但也非常危險(xiǎn)。因此在使用 eval()時(shí)必
須極為謹(jǐn)慎,特別是在用它執(zhí)行用戶輸入數(shù)據(jù)的情況下。否則,可能會(huì)有惡意用戶輸
入威脅你的站點(diǎn)或應(yīng)用程序安全的代碼(即所謂的代碼注入)。
3. Global 對(duì)象的屬性
Global 對(duì)象還包含一些屬性,其中一部分屬性已經(jīng)在本書(shū)前面介紹過(guò)了。例如,特殊的值
undefined、NaN 以及 Infinity 都是 Global 對(duì)象的屬性。此外,所有原生引用類(lèi)型的構(gòu)造函數(shù),像
Object 和 Function,也都是 Global 對(duì)象的屬性。下表列出了 Global 對(duì)象的所有屬性。
屬 性 說(shuō) 明 屬 性 說(shuō) 明
undefined 特殊值undefined Date 構(gòu)造函數(shù)Date
NaN 特殊值NaN RegExp 構(gòu)造函數(shù)RegExp
Infinity 特殊值Infinity Error 構(gòu)造函數(shù)Error
Object 構(gòu)造函數(shù)Object EvalError 構(gòu)造函數(shù)EvalError
Array 構(gòu)造函數(shù)Array RangeError 構(gòu)造函數(shù)RangeError
Function 構(gòu)造函數(shù)Function ReferenceError 構(gòu)造函數(shù)ReferenceError
Boolean 構(gòu)造函數(shù)Boolean SyntaxError 構(gòu)造函數(shù)SyntaxError
String 構(gòu)造函數(shù)String TypeError 構(gòu)造函數(shù)TypeError
Number 構(gòu)造函數(shù)Number URIError 構(gòu)造函數(shù)URIError
ECMAScript 5 明確禁止給 undefined、NaN 和 Infinity 賦值,這樣做即使在非嚴(yán)格模式下也會(huì)
導(dǎo)致錯(cuò)誤。
4. window 對(duì)象
ECMAScript 雖然沒(méi)有指出如何直接訪問(wèn) Global 對(duì)象,但 Web 瀏覽器都是將這個(gè)全局對(duì)象作為
window 對(duì)象的一部分加以實(shí)現(xiàn)的。因此,在全局作用域中聲明的所有變量和函數(shù),就都成為了 window
對(duì)象的屬性。來(lái)看下面的例子。
var color = \"red\";
function sayColor(){
alert(window.color);
}
window.sayColor(); //\"red\"
GlobalObjectWindowExample01.htm
圖靈社區(qū)會(huì)員 StinkBC(StinkBC@gmail.com) 專享 尊重版權(quán)