將函數裏的arguments
,轉換成一個真正的數組的方法。數組
arguments
是個類數組,除了有實參所組成的相似數組之外,還有本身的屬性,如callee
,arguments.callee
就是當前正在執行的這個函數的引用,它只在函數執行時才存在。由於在函數開始執行時,纔會自動建立第一個變量arguments
對象。app
arguments
是個類數組它將實參以數組的形式保存着,還能夠像數組同樣訪問實參,如:arguments[0]
;函數
它也有本身獨特的屬性,如:callee
;this
它的長度是實參的個數。prototype
那arguments.callee.length
又是什麼呢?code
arguments.callee
是當前正在執行的函數的引用,相似function.length
,那就是形參的個數。對象
arguments
轉換爲真正的數組的方法Array.prototype.slice.apply(arguments)
這是運行效率比較快的方法(看別人資料說的),爲何不是數組也能夠,由於arguments
對象有length
屬性,而這個方法會根據length
屬性,返回一個具備length
長度的數組。若length
屬性不爲number
,則數組長度返回0
;io
因此其餘對象只要有length
屬性也是能夠的喲,如對象中有屬性0
,對應的就是arr[0]
,即屬性爲天然數的number
就是對應的數組的下標,若該值大於長度,固然要割捨啦。function
Array.prototype.concat.apply(thisArg,arguments)
thisArg
是新的空數組,apply
方法將函數this
指向thisArg
,arguments
作爲類數組傳參給apply
。class
根據apply
的方法的做用,即將Array.prototype.slice
方法在指定的this
爲thisArg
內調用,並將參數傳給它。用此方法注意:若數組內有數組,會被拼接成一個數組。緣由是apply
傳參的特性。
Array
的構造函數如Array(1,2,3,4,5,6)
,能夠返回一個傳入的參數的數組。那Array.apply(thisArg,arguments)
也能夠將arguments
轉化爲數組,果真實驗是能夠的。
有沒有什麼影響呢,就是亂用了構造函數,但這也是 JS 的特性嘛,構造函數也是函數。
用此方法注意:若數組內有數組,會被拼接成一個數組。
緣由是apply
傳參的特性。
由於arguments
相似數組可使用arguments[0]
來訪問實參,那麼將每項賦值給新的數組每項,直接複製比push
要快,若實參有函數或者對象,就要深拷貝。
最完美的方法應該是Array.prototype.slice.apply(arguments)
了。