快捷搜索: 王者荣耀 脱发

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);
	});
这样就能正常输出了。

经验分享 程序员 微信小程序 职场和发展