getElementsByName返回值为Object
今天我做一个js对checkbox选中进行取值时,发现一个有意思的问题,关于getElementsByName返回值的问题。
当时第一个反应就是,getElementsByName返回肯定属于Array类型啊,于是我放心大胆的使用了map遍历的方法。于是就出现了下面的错误:
很奇怪,一个数组的正常遍历怎么会报错啦,于是我用了instanceof 将他的属性输出来。
ckecks instanceof Array
返回类型是false!!!!既然不是一个数组,难怪map遍历不能成功。于是我将Array改成Object,这次返回了true。发现原来getElementsByName返回的是一个Object类型的对象。
我将它输出到控制台上,发现他的架构跟数组特别像:
我去查了下资料,原来getElementsByName返回的并不是并不是数组,而是一个叫做NodeList的集合,他并不属于数组,
但是他可以像数组一样获得.length和进行for循环遍历。
当然如果你真的需要用map遍历,也可以用Array.prototype.slice.call()将它转换成Array类型:
Array.prototype.slice.call(ckecks).map(function(value,i){ console.log(i); });这样就能正常输出了。