一般使用下面的方法來將 arguments 轉換成數組:css
Array.prototype.slice.call(arguments);
還有一個更簡短的寫法:數組
[].slice.call(arguments);
在這裏,只是簡單地調用了空數組的 slice 方法,而沒有從 Array 的原型層面調用。app
爲何上面兩種方法能夠轉換呢?函數
首先,slice 方法獲得的結果是一個數組,參數即是 arguments。事實上,知足必定條件的對象都能被 slice 方法轉換成數組。看個例子:this
const obj = { 0: "A", 1: "B", length: 2 }; const result = [].slice.call(obj); console.log(Array.isArray(result), result);
function foo() { bar.apply(this, arguments); } function bar(a, b, c) { // logic }
Array.from()
是個很是推薦的方法,其能夠將全部類數組對象轉換成數組。prototype
數組具備一個基本特徵:索引。這是通常對象所沒有的。code
const obj = { 0: "a", 1: "b" }; const arr = [ "a", "b" ];
咱們利用 obj[0]
、arr[0]
都能取得本身想要的數據,但取得數據的方式確實不一樣的。obj[0]
是利用對象的鍵值對存取數據,而arr[0]
倒是利用數組的索引。事實上,Object 與 Array 的惟一區別就是 Object 的屬性是 string,而 Array 的索引是 number。對象
function func() { console.log(...arguments); } func(1, 2, 3);
執行結果是:blog
1 2 3
簡潔地講,擴展操做符能夠將 arguments 展開成獨立的參數。索引