最高半折刷qq各种业务和钻(家里人自己开的,尽管放心,大家多捧捧场)

sking7

导航

你所不知道的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








posted on 2012-03-28 16:50  G.N&K  阅读(330)  评论(0编辑  收藏  举报