對於任何JavaScript程序,當程式開始運行時,JavaScript解釋器都會初始化一個全域物件以供程式使用。這個JavaScript本身提供的全域物件的功能包括:
1.全域物件擁有一些常用的屬性值。例如undefined、Infinity以及NaN。
2.全域物件擁有一些常用的屬性物件。例如Math、JSON和Number物件皆為該全域物件的屬性。
3.全域物件提供一些全域函數供呼叫。例如isNaN()、isFinite()、parseInt()和eval()等。
4.全域物件提供一些全域建構器(constructor),也即全域類別。例如Date()、RegExp()、String()、Object()和Array()等。
除了JS全域對象,對於運行在瀏覽器端的JavaScript程序,還有另一個全域對象:window。 window全域物件提供了與目前視窗、頁面相關的許多屬性與方法。除了這些與瀏覽器相關的全域屬性和方法,window物件還封裝了JS全域對象,並向外暴露JS全域物件的屬性與介面;因此,當進行瀏覽器端JavaScript程式設計時,只需關心window全域對象即可。
對於JavaScript程式中的this,如果this不屬於任何function,那麼這個this就指代JS全域物件;如果是瀏覽器端執行的JS程序,那麼這個this就指涉window全域物件。
如果這個this屬於某個function,那麼this指涉的就是呼叫該function的物件。若在這種情況下function只是一個普通的函數,而不是某個類別的方法,那麼this的指涉存在兩種可能:
1.在ECMAScript 3標準,以及ECMAScript 5標準的非嚴格模式下,this指涉全域物件。
2.在ECMAScript 5標準的嚴格模式下,this指涉undefined。
根據此特性,可以使用以下程式碼來判斷目前是否處於嚴格模式:
如果在JavaScript程式中建立了全域變量,那麼這個全域變數就會成為全域物件中的屬性。
實驗
x = "test";
console.log(a.x);//access newly created global variable value