各種瀏覽器環境提供的JavaScript全域物件/函數實例詳解

伊谢尔伦
發布: 2017-07-27 16:54:21
原創
1457 人瀏覽過

宿主環境提供的全域物件/函數

如window,alert,setTimeout,document,location等,多數瀏覽器都會限制其重寫

window = 55; alert(window);
登入後複製

該句在IE下會出錯提示非法複製,後面的彈出框沒有執行。其它瀏覽器則當window=55不存在,仍然彈出了window。

再重寫alert

alert = 55; console.log(alert);
登入後複製

IE下提示報錯,Firefox/Chrome/Safari/Opera竟然被重寫了,從對應的控制台可以看到輸出了55。可以看出對於宿主環境提供的全域物件/函數,有的瀏覽器不支援重寫,有的則可以重寫 。

以下是兩種方式宣告全域變數

a1 = 11; var a2 = 22; for(a in window){ if(a=='a1'||a=='a2'){ alert(a) } }
登入後複製

上述程式碼不會在IE中彈出訊息框,在IE中內部大概如下

//IE with(host_object){//window with(global_object){//Global a1 = 11; var a2 = 22; } }
登入後複製

即a1,a2是作為上面說的第一種,JS引擎提供的Global物件上的屬性,而非第二種宿主環境提供的window物件上的屬性。因此IE中for in window時a1,a2都不存在。如果IE中提供對象Global物件的引用,沒準下面的程式碼可以彈出資訊框。

for(a in Global){ if(a=='a1'||a=='a2'){ alert(a) } }
登入後複製

Firefox/Safari/Chrome/Opera中內部大概是下面的樣子

//Firefox/Safari/Chrome/Opera with(host_object){//window a1 = 11; var a2 = 22; with(global_object){//Global } }
登入後複製

即a1,a2是作為上面說的第二種,宿主環境提供的全局物件window上的屬性。因此for in window時a1,a2都存在,彈出了訊息框。

再看第三者方式宣告全域變數window.a3 = 33,這樣是顯示的把a3掛在window上作為window的屬性,因此在所有瀏覽器中for in window時都能取得到a3。

以上是各種瀏覽器環境提供的JavaScript全域物件/函數實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!