Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回dom节点的窗口对象属性?_Javascript_Html_Dom - Fatal编程技术网

Javascript 返回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); 在本例中,控制台将输出及其任

我注意到,当我试图检查window对象中的变量时,javascript将返回id与变量名匹配的DOM节点。考虑下面的代码:

<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 );