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