如果元素未定义,document.getElementById将返回null?

51

在我的代码中,我看到这个:

if (document.getElementById('xx') !=null) {
    //do stuff
}
如果xx元素未定义,这个表达式会被计算为真还是假?
应该写:
if (document.getElementById('xx'))

如何保持安全?


3
如果指定的ID元素未在文档中,则返回null。 - raina77ow
document.getElementById('xx') 将返回 undefined - Khanh Tran
@KhanhTran 实际上它确实返回了 null。在控制台中测试一下。 - Denys Séguret
奖励链接:DOM规范。是的,在那里也是null - raina77ow
3个回答

100
console.log(document.getElementById('xx') ) evaluates to null.

document.getElementById('xx') !=null evaluates to false

你应该使用 document.getElementById('xx') !== null,因为它是一种更强的相等性检查方法。


2
谢谢。有没有任何情况会返回未定义? - Victor
4
谢谢您展示console.log的技巧,您正在教我们如何钓鱼。 - Ulad Kasach
发布时记得删除 console.log - jay

29

getElementByIdDOM Level 1 HTML定义用于在没有匹配元素的情况下返回null

!==null是最明确的检查形式,也可能是最好的形式,但是getElementById不能返回非null的falsy值,你只能得到null或始终为真的Element对象。所以在这里!==null, !=null或更宽松的if(document.getElementById('xx'))之间没有实际区别。


2
这应该是被接受的答案,因为getElementById返回的唯一假值是null,如果你只想检查存在性,就没有理由检查任何其他值。 - cowbert

10

如果没有找到,它将返回null,您可以在演示中尝试以下内容。这两个都将返回true。第一个元素存在,第二个不存在。

Demo

Html

<div id="xx"></div>

Javascript:

   if (document.getElementById('xx') !=null) 
     console.log('it exists!');

   if (document.getElementById('xxThisisNotAnElementOnThePage') ==null) 
     console.log('does not exist!');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接