簡單談?wù)凧avascript函數(shù)中的arguments
一、arguments的面貌
在javascript中所有的函數(shù)內(nèi)部都包含了一個隱藏的變量叫arguments;它存放著所有傳遞到這個函數(shù)中的參數(shù);
那么我們打開實例看看arguments的輸出形式
(function fn(){ console.log(arguments) })(1,2,3,4)
結(jié)果好像是類似數(shù)組的形式打印在控制臺,相信大多數(shù)人包括我看到這種輸出就會認為arguments是一個數(shù)組,那么既然是數(shù)組就可以用數(shù)組的一些方法了吧,再看下一個例子;
(function fn(){ arguments.push(5) console.log(arguments) })(1,2,3,4)
結(jié)果報錯了- -?。唬ㄔ陧椖恐形揖褪遣鹊搅诉@個坑);
那我們就會有一個疑惑了,既然是數(shù)組為什么不能用push方法呢,其他的像pop,slice也不行么,是的,都不行,雖然arguments也能通過下標(biāo)的形式獲取到對應(yīng)位置的參數(shù),當(dāng)本質(zhì)上不算是真正的數(shù)組;
我們通過instanceof打印看看它是不是Array的孩子
(function fn(){ console.log(arguments instanceof Array) })()
果不其然真不是數(shù)組,那么我們就會聯(lián)想到它就是個對象了;
雖然它也能用for循環(huán)遍歷到里面的參數(shù),但把它轉(zhuǎn)為真正的數(shù)組才是更好的選擇;
二、轉(zhuǎn)化為數(shù)組
轉(zhuǎn)化的方法有很多,對象冒充的方式傳遞給Array.prototype或遍歷push到空數(shù)組或傳遞給另一個函數(shù)等等。。都可以完成,下面簡單介紹幾個轉(zhuǎn)化的方法,遍歷push到空數(shù)組的方法就不細講了;
第一種方法:
(function fn(){ var arr = Array.prototype.slice.call(arguments) arr.push(5) console.log(arr) })(1,2,3,4)
這種轉(zhuǎn)化方式比較慢,在性能不好的情況下不推薦這種寫法;
第二種方法:
function fn() { fnArr.apply(null, arguments); } function fnArr(a,b,c,d) { ··· }
個人推薦這種做法;
總結(jié)
以上就是這篇文章的全部內(nèi)容了,雖然寫的不多,但還是希望大家能在項目的過程當(dāng)中不要誤踩了arguments的坑,希望本文能對大家有所幫助。
- javascript arguments 傳遞給函數(shù)的隱含參數(shù)
- JavaScript中使用arguments獲得函數(shù)傳參個數(shù)實例
- javascript函數(shù)中的arguments參數(shù)
- JavaScript arguments 多參傳值函數(shù)
- javascript下利用arguments實現(xiàn)string.format函數(shù)
- 理解Javascript_14_函數(shù)形式參數(shù)與arguments
- Javascript學(xué)習(xí)筆記之函數(shù)篇(四):arguments 對象
- JS函數(shù)arguments數(shù)組獲得實際傳參數(shù)個數(shù)的實現(xiàn)方法
- 深入理解JS函數(shù)的參數(shù)(arguments)的使用
相關(guān)文章
javascript 基礎(chǔ)篇2 數(shù)據(jù)類型,語句,函數(shù)
文章里如果有錯誤的話,希望能幫忙指正~我也是邊看視頻邊學(xué)習(xí)中,這個算是個筆記吧~自認為總結(jié)出來的東西比看視頻要節(jié)省點時間~能幫到別人最好了~幫不到也起碼恩能幫到我自己2012-03-03JavaScript bold方法入門實例(把指定文字顯示為粗體)
這篇文章主要介紹了JavaScript字符串對象的bold方法入門實例,bold方法用于把指定文字顯示為粗體,需要的朋友可以參考下2014-10-10客戶端腳本中常常出現(xiàn)的一些問題和調(diào)試技巧
客戶端腳本中常常出現(xiàn)的一些問題和調(diào)試技巧...2007-01-01javascript中substr,substring,slice.splice的區(qū)別說明
某些情況下,負數(shù)的參數(shù)不識別.所以盡量不要用負數(shù)作參數(shù).免得瀏覽器不兼容,造成程序的出錯.2010-11-11