全局對象是JavaScript中很是重要的一類對象,它做爲程序頂層(程序最頂端,不包括在任何函數以內)的上下文存在,JavaScript中的全局屬性、全局函數都是經過全局對象來提供給程序的,好比javascript
全局屬性 如:undefined,Infinity,NaNjava
全局函數 如:isNaN(),parseInt(),eval()函數
構造函數 如:Date(),RegExp(),String(),Object(),Array()this
全局對象 如:Math、JSONcode
當一段JavaScript程序開始執行的時候,JavaScript解釋器便會建立一個新的全局對象,將那些初始屬性定義給它,這些預約義屬性也都是可枚舉的。 全局對象僅僅是一個對象,而不是類,不擁有構造函數,故咱們不能實例化一個新的全局對象。對象
咱們在程序中所定義的全局變量也會以全局對象屬性的形式存在,全局對象就是全局做用域的「聲明上下文對象「:ip
var a = 1; console.log(this.a); // 1不使用var關鍵字的全局變量也是一樣:
function test(){ a = 1; }; test(); console.log(window.a); // 1這段代碼裏還有個點:全局對象window內有個屬性window指向它自身,因而咱們能夠使用window屬性代替this來引用全局對象。
在代碼的最頂級能夠直接用關鍵字this來引用全局對象:作用域
再好比NodeJs中:it
全局對象的預約義屬性是可枚舉的,咱們能夠使用for in循環來查看它們io
for(var attr in this){ console.log(attr + ':' + this[attr] + '\n'); }