淺談[].slice.call(arguments, 1)


今天在跟蹤調試項目的代碼時,發現在一個function中用到了這么一段[].slice.call(arguments, 1) 的代碼。心中便起了疑惑,對於slice 和 call 的方法,倒是不怎么陌生,解析了下上面的那段代碼,就是為了獲取arguments 從1 開始到結尾的所有元素。只是覺得奇怪為什么不直接用 arguments.slice(1) 這樣去使用呢?(PS:JS當初是啃了《JavaScript權威指南》,可是后面也沒有怎么深入去用,最近轉來開發HTML5 Game 時,才發現好多基礎的東西都忘記的差不多了,汗!!!)。於是,就自己先做了下面的測試:

測試1 先打印下 arguments

var a = function(f){
console.log(arguments);
}

a('show', [12,3,4,55]);

 

結果:['show', Array[4]]

測試2

var a = function(f){
console.log([].slice.call(arguments, 1));
}

a('show', [12,3,4,55]);

 

結果:[Array[4]]
測試3

var a = function(f){
console.log(arguments.slice(1));
}

a('show', [12,3,4,55]);

結果:報錯!!! **arguments.slice is not a function(...)**
此時就心中產生了疑惑了,為啥在測試一中打印出來的arguments 是個數組的東西啊,為啥會提示沒有slice這個方法呢?帶着疑問我去請教下了隊伍里的大牛,得到了下面的答案:

測試4

(function() {
console.log(arguments instanceof Array)
})();

結果:false
arguments 並非數組,只是訪問單個參數的方式與訪問數組元素的方式相同。因此在使用slice方法的時候,需要用類似[].slice.call(arguments, 1) 的這種方式去調用,至此,關於這條語句引發的思考也就此結束了

 

 

 

 

 

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM