瀏覽器兼容性
從理論上認識事物的工作原理是有用的,但實際影響是至關重要的。當涉及到variable/property creation/deletion時,瀏覽器遵循標準嗎?在大多數(shù)是的。
我寫了一個簡單的測試包檢測Global code、Function code 和Eval code代碼delete 運算符的兼容性。測試包同時檢查 -- delete 運算符的返回值,以及應被刪除的屬性是否被刪除的。delete 運算符返回true 或false 并不重要,重要的是有DontDelete特性不被刪除,反之亦然。
現(xiàn)代瀏覽器一般都相當兼容,除了這個我早期提到的這個eval特性。下面的瀏覽器完全通過測試包:Opera 7.54+、Firefox 1.0+、Safari 3.1.2+、Chrome 4+。
Safari 2.x 和3.0.4在刪除函數(shù)參數(shù)時有些問題,這些屬性似乎沒有創(chuàng)建DontDelete,所以可以刪除它們。Safari 2.x 甚至有更多問題,刪除非引用(例如delete 1 )拋出錯誤;函數(shù)聲明創(chuàng)建了可刪除屬性(但奇怪是變量聲明不是),在eval中的變量聲明成為不可刪除的(但函數(shù)聲明不是)。
與Safari相似,Konqueror (3.5,但不是 4.3)當刪除非引用(例如delete 1 )拋出錯誤,它錯誤使函數(shù)參數(shù)可以刪除。
Gecko DontDelete bug
Gecko 1.8.x瀏覽器--Firefox 2.x、 Camino 1.x、Seamonkey 1.x等顯示一個有趣的bug:對一個屬性明確地賦值可以刪除它的DontDelete特性,即使該屬性是通過變量或函數(shù)聲明來創(chuàng)建的。
function foo(){}
delete foo; // false (as expected)
typeof foo; // "function" (as expected)
/* now assign to a property explicitly */
this .foo = 1; // erroneously clears DontDelete attribute
delete foo; // true
typeof foo; // "undefined"
/* note that this doesn't happen when assigning property implicitly */
function bar(){}
bar = 1;
delete bar; // false
typeof bar; // "number" (although assignment replaced property)
出乎意料的是,IE5.5 – 8全部通過測試包,刪除非引用(例如delete 1 )拋出錯誤(就像在老版的Safari一樣)。但事實上有更嚴重bug存在IE中,這不會立即顯現(xiàn)。這些bug都與全局對象相關。
出處:
責任編輯:bluehearts
上一頁 理解delete [4] 下一頁 理解delete [6]
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|