Array.prototype.slice.call(arguments, 1),和 arguments.slice(1) 的區別?
因爲arguments並不是真正的數組對象,只是與數組類似而已,所以它並沒有slice這個方法,而Array.prototype.slice.call(arguments, 1)
可以理解成是讓arguments轉換成一個數組對象,讓arguments具有slice()方法。要是直接寫arguments.slice(1)會報錯。
將函數的實際參數轉換成數組的方法:
方法一:var args = Array.prototype.slice.call(arguments);
方法二:var args = [].slice.call(arguments, 0);
方法三:
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
最後,附個轉成數組的通用函數
var toArray = function(s){
try{
return Array.prototype.slice.call(s);
} catch(e){
var arr = [];
for(var i = 0,len = s.length; i < len; i++){
//arr.push(s[i]);
arr[i] = s[i]; //據說這樣比push快
}
return arr;
}
}