也许不是常识,但"现代浏览器上的Javascript似乎会为具有ID的DOM元素在window对象上创建变量"。
了解这一点后,我希望能够删除这些变量,下面是我尝试过但没有成功的代码。同时请考虑我的控制台.log语句的截图,其中第一个指示why
不是window的属性(它应该出现在"webkitUrl"和"window"之间),但是在紧随其后的两个console.log语句中,window/why被显示为文档中的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>
non-configurable
属性无法被删除。 - 4castleObject.getPrototypeOf(Object.getPrototypeOf(window)).hasOwnProperty("foobar")
的返回值为true
,并且.getOwnPropertyDescriptor()
将其列为可配置和可写的,但我不能删除它或者向它写入。 - user1106925why
,但如果您尝试将其分配给 why,它确实会发出警告。 - DexygenObject.defineProperty(window, "foobar", {value: undefined})
。虽然会有不同的错误,但总比没有好。 - user1106925