1

我有以下代码

var commentId = 1834;

alert("getElementsByName:: " + typeof(document.getElementsByName("tmp_airDiff" + commentId)[0]));   
alert("getElementById:: " + typeof(document.getElementById("tmp_airDiff" + commentId)));

文档中没有具有tmp_airDiff1834id 或 name 的元素。

然而,这就是我得到的回报:

getElementsByName:: undefined
getElementById:: object

当文档中没有这样的对象时,谁能解释为什么在使用时getElementById返回?objecttypeof

4

4 回答 4

10

你很困惑,因为

typeof null === "object"

getElementById返回null

是的,这很奇怪,就像typeof NaN === "number",但它就是这样工作的

在此处输入图像描述

在 的情况下getElementsByName,您将输出 的类型undefined,这是您在访问数组(或类似数组的对象,此处)中的元素时得到的。

[][1] === undefined

通过更合适的调试实践,您不会陷入这个陷阱。而不是使用

alert("some name : " + typeof(someValue))

你最好使用浏览器的控制台

console.log("some name :", someValue)

请注意,如果在 中进行测试,您将有一个统一的行为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
}
于 2013-07-11T13:49:15.763 回答
3

原因是当没有找到具有给定 ID 的元素时document.getElementById()返回。nulltypeof(null)返回object

于 2013-07-11T13:49:03.627 回答
3

getElementById如果未找到元素,则Simple返回 null 并且typeof nullis object
getElementsByName返回一个集合,如果它为空,则任何索引都将typeof undefined是未定义的。

于 2013-07-11T13:50:08.263 回答
1

getElementsByName返回的原因undefined是因为它返回一个array,并且您正在引用一个不存在的索引。举个例子:

var array = [];
array[2320]; //undefined
array[0]; //undefined

getElementById另一方面,null在未找到元素时返回(它不返回空数组)。

于 2013-07-11T13:54:48.237 回答