window對象的屬性方法名形成的命名衝突

事件原由:html

  一次開發中須要獲取一個數組的長度,寫下如此代碼chrome

1 function func(arr){
2     length = arr.length;
3     ......//相關操做
4 }

程序在chrome下正常運行,但到IE8下出現了問題。檢查代碼,發現因爲粗心,在函數體內部聲明變量時 掉了一個var。數組

但咱們知道,js是一種弱類型語言,即便是直接賦值給未聲明變量也是能夠的,並且chrome下是能夠正常運行的,說明這樣寫也是沒錯的。瀏覽器

拿到IE開發人員工具的console裏跑一下,終於知道了一二。安全

在IE6,7,8下輸入函數

length  = 1;

顯示:對象不支持此操做工具

爲何會報這樣的警告呢?spa

咱們知道直接這樣聲明的變量是全局變量,瀏覽器的全局對象是window,這裏便是window.length = 1;code

window.length是什麼呢?htm

其實就是window.frames.length,即frame的數量,對它進行賦值改變,顯然很容易觸發一些問題。

不光是length,window對象的其餘屬性也不能隨意賦值,例如:

frames = 1;

顯示:還沒有實現的警告

其餘瀏覽器爲何能夠呢?


打開chrome的console,輸入

length = 3;
console.log(window.frames.length);

輸出:3,IE9+也是如此。

不只如此,在IE8下,輸入

var length = 3;
console.log(window.frames.length);

也是輸出3。

顯然瀏覽器是容許開發者顯示的去改變內置對象window的一些屬性的

後續思考

瀏覽器開發商容許開發者能夠顯示地改變這些屬性,是否會形成一些安全性問題,身爲菜鳥的我不得而知,但有時確實會形成一些沒必要要的麻煩,好比像愚安我此次遇到的這種小問題。

因此在此提醒一下一些像我這樣的js菜鳥注意下,在使用全局變量時,儘可能避開window的一些屬性名稱,以避免出現很鬱悶的問題,但願能或多或少給你們一點啓發。

關於window對象有哪些屬性,在此愚安我就不一一列舉了,想知道童鞋們能夠移步另外一篇園子裏的博客:js-window對象的方法和屬性資料

好了,這是愚安我入駐園子的第一篇,但願你們多多指教,多多照顧。

相關文章
相關標籤/搜索