我有以下代码
var commentId = 1834;
alert("getElementsByName:: " + typeof(document.getElementsByName("tmp_airDiff" + commentId)[0]));
alert("getElementById:: " + typeof(document.getElementById("tmp_airDiff" + commentId)));
Run Code Online (Sandbox Code Playgroud)
tmp_airDiff1834文档中没有包含id或name的元素.
然而,这就是我得到的回报:
getElementsByName:: undefined
getElementById:: object
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么在使用时getElementById返回,当文档中没有这样的对象时?objecttypeof
Den*_*ret 10
你很困惑,因为
typeof null === "object"
Run Code Online (Sandbox Code Playgroud)
并getElementById返回null.
是的,这很奇怪,就像typeof NaN === "number",但它是如何工作的.

在这种情况下getElementsByName,您输出的类型undefined是从数组(或类似数组的对象)访问元素时获得的类型.
[][1] === undefined
Run Code Online (Sandbox Code Playgroud)
通过更适应的调试练习,你不会感觉到这个陷阱.而不是使用
alert("some name : " + typeof(someValue))
Run Code Online (Sandbox Code Playgroud)
你最好使用浏览器的控制台:
console.log("some name :", someValue)
Run Code Online (Sandbox Code Playgroud)
请注意,如果测试时您将具有统一的行为if:
if (document.getElementsByName("tmp_airDiff" + commentId)[0]) {
// never goes there as undefined is falsy
}
if (document.getElementById("tmp_airDiff" + commentId)) {
// never goes there as null is falsy
}
Run Code Online (Sandbox Code Playgroud)