在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