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