Javascript 为什么document.getElementsByName虽然有元素,但长度为0?

Javascript 为什么document.getElementsByName虽然有元素,但长度为0?,javascript,html,dom,Javascript,Html,Dom,脚本在加载文档之前运行,那么为什么console.log(b)显示集合中的元素呢 如果console.log(b)有元素,那么为什么console.log(b[0])显示未定义的和console.log(b.length)0 功能测试(){ var b=document.getElementsByName('a'); 控制台日志(b); console.log(b[0]); 控制台日志(b.长度); } test(); getElementsByName返回一个。它是一个包含匹配节点列表的对

脚本在加载
文档之前运行,那么为什么
console.log(b)
显示集合中的元素呢

如果
console.log(b)
有元素,那么为什么
console.log(b[0])
显示
未定义的
console.log(b.length)
0


功能测试(){
var b=document.getElementsByName('a');
控制台日志(b);
console.log(b[0]);
控制台日志(b.长度);
}
test();

getElementsByName
返回一个。它是一个包含匹配节点列表的对象,因此
b
不为空


但是,您正在DOM准备就绪之前运行脚本,因此列表的长度为0,没有第一个对象。您需要将脚本执行延迟到解析DOM之后,此时表单将存在。

因为表单中没有任何元素?返回的集合是“活动列表”。当项目添加到DOM或从DOM中删除时,它会自动更新。因此,当您查看集合时,集合的console视图将显示其当前状态,而
b[0]
视图将获取您进行
console.log()
调用时的状态。您可以等待DOM准备就绪,这可能会有所帮助:您正在看到以下效果:。。。可能这是实际的重复。如果您使用Chrome控制台,请阅读
(i)
图标提示:
在第一次扩展时捕获下面的对象状态