检查 Javascript 删除功能的支持

问题描述 投票:0回答:2

在 Javascript 中,您可以

delete
对象属性:

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

即我可以判断浏览器是否将某个属性视为

host 还是 native

javascript cross-browser ecmascript-5 browser-feature-detection
2个回答
3
投票

delete

是一个基本的javascript语言功能,IE6-8也支持。只是这些旧版浏览器在删除 
imutablenative / host 对象属性时的处理方式有所不同。恐怕 try-catch
 声明是您解决此问题的唯一选择。


0
投票
在 Internet Explorer 5-8 中,

Object.prototype.propertyIsEnumerable()

 在主机对象上使用时会引发以下 TypeError:

Object.prototype.propertyIsEnumerable:“this”不是 JavaScript 物体

因此,下面的函数会告诉您在不先添加属性的情况下对对象使用delete是否会抛出异常。

function canUseDeleteOn(obj) { try { // throws on host objects in IE5-8 Object.prototype.propertyIsEnumerable.call(obj, 1); return true; } catch(e) { return false; } }
我知道这个问题已经很老了,你可能希望避免使用 try/catch,但晚总比不好,对吗?

© www.soinside.com 2019 - 2024. All rights reserved.