typeof 和 instanceof apply与call简单用法以及判断数组的坑

1 typeof 和 instanceof

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


2 call 和 apply


上面既提到call的用法,那么我就顺便说一下call和apply的用法。prototype

apply:

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

call:

Function.call(obj,[param1[,param2[,…[,paramN]]]])
其实这里的参数列表 [param1[,param2[,…[,paramN]]]]= arguments;只是call 必须将参数列出来;
若是运用上面的例子,输出的结果是同样同样的!console

 

若是还有其余延伸的有意思的方法给以发评论告诉我!function

相关文章
相关标签/搜索