var array = [];
平时若是判断一个对象是否为数组,可能你会用 typeof array,可是输出为“object”。数组
typeof 通常只能返回以下几个结果:
number,boolean,string,function,object,undefined。
对于 Array,Null 等特殊对象使用 typeof 一概返回 object。app
因此你因该 :
array instanceof Array 输出为 true;
固然 :
array instanceof Object 输出也为 true;
由于 Array自己就是对象的子集。函数
这也是为何转化类数组为数组的方法为:
Array.prototype.slice.call(arguments,0);
固然:
[].slice.call(arguments,0);也是能够的。this
上面既提到call的用法,那么我就顺便说一下call和apply的用法。prototype
Function.apply(obj,args)方法能接收两个参数,
obj:这个对象将代替Function类里this对象
args:这个是数组,它将做为参数传给Function(args-->arguments, 指的是函数中的参数对象
实例:
function people(age,sex){
this.age=age;
this.sex=sex;
};
function adult(age,sex){
people.apply(this,arguments)
};
var jack = new adult(18,'man');console.log(jack.age+":"+jack.sex)
输出为 18:man;
其实看到这段代码就知道apply怎么用了吧。
其实apply 说到底就是为了使的一个对象可使用不属于本身的方法,例如:jack.people(),这样确定不行的!string
网上看到的关于apply一些延伸的方法:
求最大值:var array = [1,2,3];Math.max.apply(null,array); // 3
求最小值:var array = [1,2,3];Math.min.apply(null,array); // 1
合并数组:var array1 = [1,2,3],array2 = [4,5,6];Array.prototype.push.apply(array1,array2);
其实就是利用apply的特性将数组转化为参数列表[param1[,param2[,…[,paramN]]]],去处理这些问题。
前两个方法是由于不接受数组,因此这样处理。
第三个合并数组有不少其余方法,能够不这样用。io
Function.call(obj,[param1[,param2[,…[,paramN]]]])
其实这里的参数列表 [param1[,param2[,…[,paramN]]]]= arguments;只是call 必须将参数列出来;
若是运用上面的例子,输出的结果是同样同样的!console
若是还有其余延伸的有意思的方法给以发评论告诉我!function