在Javascript中你可以delete
一個對象屬性:檢查支持JavaScript的刪除功能
var o = { x: 1, y: 2 };
var wasDeleted = delete o.x;
現在o.x
應undefined
和wasDeleted
是true
。
但是你只能刪除本地對象,不幸的是,瀏覽器似乎對這個有不同的想法:
window.x = 1;
delete window.x;
現在在Chrome和IE9-10 x
將undefined
,但在IE6-8,這將引發例外:
「對象不支持此操作」
大。請注意,這不是delete
不受支持......
// Oops, no var, so this is now a global, should've 'use strict'
o = { x: 1, y: 2 };
// Works
delete o.x;
// Works
delete window.o.y;
// Fails, but only in IE6-8 :-(
delete window.o
我意識到,我可以添加一個try {...} catch
塊,但是......
有沒有什麼辦法來檢查瀏覽器是否支持delete
反對一個特定的對象之前它被稱爲?
I.e.我可以通過瀏覽器判斷一個屬性是否被認爲是主機或原生?
主機對象(如* window *)不需要像本地對象那樣工作(如Object的實例)。在處理主對象(如DOM對象)時,應該使用該對象接口中指定的方法,因爲刪除主對象的屬性可能會導致在語言(ECMAScript)規範中未考慮到的重大後果(例如,刪除* checked *輸入元素的屬性)。 – RobG
@RobG我明白了,奇怪的是(僅在IE6-8中)'window.o.x'被認爲是本地屬性,而'window.o'被認爲是主機。我想要做的是檢測(沒有'try-catch')瀏覽器認爲它是哪一個。 – Keith