我找不到任何关于此问题的信息; 为什么在IE浏览器没有下面的代码工作?
window.x = 45;
delete window.x;
// or delete window['x'];
IE报告“对象不支持此操作”错误。 它有什么关系与循环访问,在IE问题的窗口属性?
我找不到任何关于此问题的信息; 为什么在IE浏览器没有下面的代码工作?
window.x = 45;
delete window.x;
// or delete window['x'];
IE报告“对象不支持此操作”错误。 它有什么关系与循环访问,在IE问题的窗口属性?
我会做这种方式:
window[x] = undefined;
try{
delete window[x];
}catch(e){}
加斯珀做出与他完成的解决方案发表评论,但我认为它的价值呼唤作为一个实际的答案:
try
{
delete window.x;
}
catch(e)
{
window["x"] = undefined;
}
有趣的问题,我只是在敲我的头靠在今晚。 抛出异常的IE浏览器,但没有Firefox浏览器。 我怀疑这种解决方法泄漏内存,所以应谨慎使用。
有人问,为什么不直接分配不确定? 如果你想以后枚举密钥(不过,如果你依靠的解决办法,关键枚举仍然不会做你想要的......),它很重要。 但无论如何,以突出显示删除,只是分配之间的差别未定义( http://jsfiddle.net/fschwiet/T4akL/ ):
var deleted = {
a: 1
};
var cleared = {
a: 1
};
delete deleted["a"];
cleared["a"] = undefined;
for(var key in deleted) {
console.log("deleted has key", key);
}
for(var key in cleared) {
console.log("cleared has key", key);
}
console.log("deleted has a?", deleted.hasOwnProperty('a'));
console.log("cleared has a?", cleared.hasOwnProperty('a'));
产生输出:
cleared has key a
deleted has a? false
cleared has a? true
这是否帮助?
window.x = 45;
alert(window.x);
window.x = null;
我在IE浏览器尝试这样做,window.x确实有一个值,这证明它可以设置。 将值设置为null是清除出来你最好的选择。
我用我的缓存自己的数据处理时,实施该解决方案 - 数据是没有太大的缓存的频率是这样的内存泄漏可能会成为一个问题。 这是昂贵的,但定期重新映射对象是我可以肯定它不是失控的最简单的方法。
obj = {a: 1, b: 2, c: 3};
var max;
function unset(obj, key) {
try {
delete obj[key];
} catch (e) {
obj[key] = undefined;
}
max++;
if(max > 200) {
var keys = Object.keys(obj);
var len = keys.length;
var n_obj = {};
for(var i = 0; i < len; i++) {
if(obj.hasOwnProperty(keys[i]) && obj[keys[i]] !== undefined) {
n_obj[keys[i]] = obj[keys[i]];
}
}
return n_obj;
}
return obj;
}
obj; //{a: 1, b: 2, c: 3}
obj = unset(obj, "b"); //{a: 1, b: undefined, c: 3} OR {a: 1, c: 3}
//and then eventually we'll garbage collect and...
obj = unset(obj, "b"); //{a: 1, c: 3}
希望,这是非常有用的一些!