你所不知道的concat和数组转换
之前的类数组对象转数组看这个文章http://www.cnblogs.com/sking7/archive/2011/12/21/2296133.html
但今天想到为啥不用concat实现呢?
var arr2=[];
arr2=Array.prototype.concat.call(arr2,document.getElementsByTagName('div'));
call第二个参数是函数的参数(并且以罗列出来的形式传参(非数组,apply是数组)),
但这样使用,生成数组只有一项
原因是:
// arrayObject.concat(arrayX,arrayX,......,arrayX)
// 参数 描述
// arrayX 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。
该参数可以是具体的值,也可以是数组对象。可以是任意多个。
也就是说,NodeList这时被当做数组里的元素。。
所以不能使用参数有歧义的数组函数。。
但可以这样
var arr2=[];
arr2=Array.prototype.concat.call(document.getElementsByTagName('div'),null);
把this指向NodeList(参数里的null不能去掉,这样被当做是参数(如上,被当做元素))
这主要得益于调用Array的方法时,内部都是调用当前数组对象,也就是this,所以下面是不行的。。
arr1=Array.apply(document.getElementsByTagName('div'),null);
这样是空数组。。因为参数是null