【发布时间】:2011-10-30 04:58:03
【问题描述】:
就在今天,在进行了几年的 javascript 编程之后,我遇到了一些让我大吃一惊的东西。浏览器为每个具有 id 的元素创建对象。对象的名称将与 id 匹配。
如果你有:
<div id ="box"></div>
你可以这样做:
alert(box); //[object HTMLDivElement]
没有首先为该变量分配任何东西。 See the demo.
由于某种原因,这似乎是in the standards,尽管它可以破坏some cases 中的代码。有一个open bug 来结束这种行为,但我现在更感兴趣的是摆脱它。
你们知道是否有办法禁用此功能(strict mode 可能)?我是否过于重视这一点?因为这显然是个坏主意。 (IE介绍给你一个提示)。
更新: FF 似乎只在怪癖模式下这样做。其他浏览器(如 IE6+ 和 Chrome)可以立即执行此操作。
【问题讨论】:
-
嗯...您在哪个浏览器和版本中看到这个?我在 FF 3.6 中,在 Firebug 中的
box上收到未定义的对象错误。不用说,我确信这是不符合 ECMA 的行为。 -
@65Fbef05 是的,FF 似乎只在怪癖模式下支持这个。我在 IE6+ 和 Chrome 中测试过
-
我对您的问题没有正确答案,但我非常担心您的对象
box是在document范围之外创建的。就我而言,这不是一个怪癖。这是一个错误。 -
为什么要禁用它?因为内存泄漏或不可预知的错误?
-
@sangdol 确实存在不可预测的错误
标签: javascript