事件原由: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對象的方法和屬性資料
好了,這是愚安我入駐園子的第一篇,但願你們多多指教,多多照顧。