为什么getElementById()如果ID不存在则返回null,如果类不存在则getElementsByClassName()返回undefined?这似乎是JavaScript语言中的不一致,因为两者都是DOM方法。例如:
console.log( document.getElementById('bogusID') ); // null
console.log( document.getElementsByClassName('bogusClass')[0] ); // undefined
我最近不得不找出困难的方法,因为我错误地假设两种方法都会返回" undefined"失败。
实际上是否存在不同返回值的原因?
答案 0 :(得分:3)
console.log( document.getElementById('bogusID') ); // null
多数民众赞成是因为您的DOM上没有bogusID项目所以返回为空
console.log( document.getElementsByClassName('bogusClass')[0] ); // undefined
这是因为你得到的数组的索引0在0指针处没有元素。所以数组的索引0没有被定义(未定义)
答案 1 :(得分:3)
document.getElementsByClassName('bogusClass')
返回一个空数组,并且您正在尝试访问不存在的第0个元素,因此您获得undefined
。
与其他编程语言不同,Javascript不会使索引超出范围异常,因为索引是作为属性实现的,并且访问不存在的属性会返回{{1} }。
在undefined
和null
的检查和处理方面,javascript中的undefined
值均为falsy
,因此对于这两种情况,您的代码应该相同。
if(condition){
// Both undefined and null would not pass the condition.
}
答案 2 :(得分:2)
我不知道程序是如何在内部为getElementById() & getElementByClass
定义的,但是根据mozilla文档getElementById()
基本上会向元素返回一个引用(对象)。
<强> ID 强>
例如:element = document.getElementById()
返回值
元素 - 是对 Element 对象的引用,如果具有指定ID的元素不在文档中,则为null。在dom中,应该只有一个ID具有相同的名称,因此ID名称中没有重用。
<强>类强>
例如:var elements = element.getElementsByClassName(names);
getElementsByClassName()方法返回包含所有子元素的实时 HTMLCollection ,其中包含所有给定的类名。在文档对象上调用时,将搜索完整文档,包括根节点。 在dom中,只有一个ID具有相同的名称,因此ID名称中没有重用,并且 HTMLCollection 使用数组来收集使用classname引用的所有元素。
未定义表示已声明变量但尚未分配值。另一方面, null 是一个赋值。它可以作为无值的表示分配给变量。
此外,undefined和null是两种不同的类型:undefined是一个类型本身(未定义),而null是一个对象。