javascript
JS之函数实际参数转换成数组的方法[].slice.call(arguments)
實際參數在函數中我們可以使用 arguments 對象獲得 (注:形參可通過 arguments.callee 獲得),雖然 arguments 對象與數組形似,但仍不是真正意義上的數組。
我們可以通過數組的 slice 方法將 arguments 對象轉換成真正的數組。
方法一:通過Array.prototype屬性調用slice方法
var args = Array.prototype.slice.call(arguments);Array 本身是沒有 slice 方法,它的方法在 Array.prototype中,而我們在調用 slice 方法的時候,如果在 Array 本身沒有找到 slice 方法的話,會通過它的原型鏈往上查找。
方法二:通過調用[]的slice方法
var args = [].slice.call(arguments);方法三:通過遍歷arguments,返回數組
function toArray(){var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return args; }注:一般的函數的 arguments.length 都在 10 以內,方法二有優勢;?方法二的代碼量上也比第一種少,至少可以減小一點字節
實例:
function revse(){try{return Array.prototype.slice.call(arguments);}catch(e){var newarr=[];for(var i=arguments.length-1;i>=0;i--){ //newarr.push(arguments[i]);newarr[i] = arguments[i]; //這樣比push快? }return newarr;} } var s = revse('a','b','c'); console.log(s); //["a", "b", "c"]跟arguments問題相關題目
在某些場景下,需要將函數的 arguments 參數作為一個數組調用,但是 arguments 是一個奇異對象,所以試著將 arguments 轉化為一個數組,例如下面例子:
function argToArr(){return [].slice.call(arguments, 0); } console.log(argToArr(1,2,3)); //[1,2,3]function argToArr(){return Array.slice.call(arguments, 0); } console.log(argToArr(1,2,3)); //Uncaught TypeError: Cannot read property 'call' of undefined這是為什么呢?
第二段代碼報錯是因為Array是構造函數,不是對象,打開控制臺,輸入?typeof Array,結果是?function。
slice()方法在其原型對象中,而[]就是Array的原型對象,在控制臺中輸入?Array.prototype,結果是[],所以第一段代碼可以順利執行。
第二段代碼如下修改就可以了:
function argToArr(){return Array.prototype.slice.call(arguments, 0); // 改這一行 } console.log(argToArr(1,2,3));?
總結
以上是生活随笔為你收集整理的JS之函数实际参数转换成数组的方法[].slice.call(arguments)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络安全分析和公有云使用的安全性
- 下一篇: 男子身体不适 周末未及时回复加班微信被辞