getElementById返回对象,getElementsByName返回none

时间:2013-07-11 13:46:04

标签: javascript dom

我有以下代码

var commentId = 1834;

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

文档中没有tmp_airDiff1834作为ID或名称的元素。

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

getElementsByName:: undefined
getElementById:: object

当文档中没有此类对象时,有人解释了getElementById在使用object时返回typeof的原因吗?

4 个答案:

答案 0 :(得分:10)

你很困惑,因为

typeof null === "object"

getElementById返回null

是的,这很奇怪,就像typeof NaN === "number",但是that's how it works

enter image description here

getElementsByName的情况下,您输出undefined的类型,这是您从数组(或类似数组的对象)访问元素时获得的类型

[][1] === undefined

通过更适应的调试练习,你不会感觉到这个陷阱。而不是使用

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

你最好use the console of your browser

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
}

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

var array = [];
array[2320]; //undefined
array[0]; //undefined
另一方面,

getElementById在找不到元素时返回null(它不返回空数组)。