【发布时间】:2016-11-07 15:51:08
【问题描述】:
知道了这一点,我希望能够删除这些变量,下面是一些我尝试过但没有成功的代码。还要考虑我的 console.log 语句的屏幕截图,它首先表明 why 不是 window 的属性(它应该位于“webkitUrl”和“window”之间),但是在紧随其后的两个 console.log 语句中第一个,窗口/为什么显示为文档中的 div?
为什么这些自动生成的变量不能像其他任何变量一样从它们的父对象中删除?
<!DOCTYPE html>
<html>
<head>
<script>
setTimeout(function() { //poor man's document/ready
var allElements = document.getElementsByTagName("*"), elementId;
for (var i=allElements.length; i--; ) {
elementId = allElements[i].id;
if (elementId && window[elementId] instanceof HTMLElement) {
delete window.why;
console.log(window);
console.log(window.why);
console.log(why);
}
}
});
</script>
</head>
<body>
<div id="why"></div>
</body>
</html>
【问题讨论】:
-
1) 你为什么要这样做? 2)
non-configurable属性无法删除。 -
delete仅适用于“自己的”属性,而不适用于继承的属性。这些元素可能位于原型链的更下游。 -
有趣的是,在 Firefox 中,
Object.getPrototypeOf(Object.getPrototypeOf(window)).hasOwnProperty("foobar")是true和.getOwnPropertyDescriptor()将其列为configurable和writable,但我无法删除或写入它。 -
@squint 有趣的是,在我在 Chrome 中的测试中,它确实删除了它(返回 true),但之后仍然存在。 JSFiddle Demo
-
@squint 完全正确,之后它仍然存在。对于其他所有人,我认为这会导致严格模式出现问题,不知道是否分配了
why,但如果您尝试分配原因,它确实会抱怨
标签: javascript dom javascript-objects