说
var elem = document.getElementById ('anId');
if (elem) ...
给出与
相同的结果if (typeof elem !== "undefined" && elem != null) ...
即。我可以用第一个替换第二个吗?
答案 0 :(得分:1)
是。在您给出的示例中,您可以使用第一个示例安全地检查是否有元素引用或null
。
底层机制是这样的:在JavaScript中,一切都可以被强制转换为布尔值。大多数事情都是“真实的”(他们强迫true
)。有些事情是falsey
(他们强迫false
)。假名值为null
,0
,""
,NaN
,undefined
,当然还有false
。 truthy值是其他所有值,包括所有非null
对象引用。由于getElementById
如果找不到元素,则返回null
,如果可能,则返回对DOM元素的引用,因此您的第一个测试是安全的。
答案 1 :(得分:0)
使用if(elem)
是可以接受的,但请注意,if(elem)
不会总是给您与if (typeof elem !== "undefined" && elem != null)
相同的结果。 JavaScript中有 falsy 值,基本上评估为false
。
例如,如果if(elem)
的值为true
,则elem
不会评估为0
,但第二种形式会{。}}}。对于NaN
,""
和false
等值,也会发生同样的情况。第二次检查更具体,因为您明确检查null
和undefined
值。第一项检查不具体,因为它会将elem
的任何值强制转换为布尔值,然后检查该值是true
还是false
。