Javascript 返回dom节点的窗口对象属性?
我注意到,当我试图检查window对象中的变量时,javascript将返回id与变量名匹配的DOM节点。考虑下面的代码:Javascript 返回dom节点的窗口对象属性?,javascript,html,dom,Javascript,Html,Dom,我注意到,当我试图检查window对象中的变量时,javascript将返回id与变量名匹配的DOM节点。考虑下面的代码: <html> <body> <div id='hello'> </div> <script>console.log(window.hello);</script> </body> </html> log(window.hello); 在本例中,控制台将输出及其任
<html>
<body>
<div id='hello'>
</div>
<script>console.log(window.hello);</script>
</body>
</html>
log(window.hello);
在本例中,控制台将输出
及其任何子体的DOM对象表示。我还注意到覆盖window.hello不会影响DOM,后续操作会显示新的赋值
是否有专门针对DOM对象进行类型检查的方法?或者,有没有办法避免这种行为?虽然不难,但在选择名称空间时必须注意页面ID似乎会变得非常违反直觉。一些浏览器会为文档中的每个ID值创建一个全局变量。一般来说,您应该使用:
document.getElementById("hello")
按id检索DOM元素
这也是您通常应该避免使用全局名称空间的另一个原因,因为它会受到这种浏览器实践的严重污染
如果您真的想测试某个东西是否是DOM对象,您可以在这里看到它是如何完成的:,但一般来说,您不需要为了常规的DOM编程目的而这样做。这实际上是HTML5标准: 一种安全的方法是将所有javascript对象和函数放在一个“名称空间”中:
我的问题的可能重复之处不在于类型检查,而在于javascript在试图访问未定义变量时返回DOM节点的性质。这是一个标准。这是HTML5标准,请参阅我帖子中的更多内容:@DonRhummy-好的,我将收回关于它不是标准的部分。自动全局名称空间污染听起来很可怕。我同意。这是一个愚蠢的标准。它应该是类似于
window.dom.hello
@DonRhummy-是的,不知道那一个是如何通过委员会的。啊哈!我还没听说过HTML5的那个功能!谢谢你的链接!
var objs = {
someObject: document.getElementById( "someThing" ),
someFunction: function() {},
hello: {
...
}
};
//Now you can access it without interfering with the DOM "hello"
console.log( window.objs.hello );