[TOC] #### 1. arguments 介紹 --- 眾所周知,js 是一門非常靈活的語言。當我們在 js 中調用一個函數時,經常會給函數傳遞一些參數,js 把調用函數時傳入的全部實參存儲到一個叫做 arguments 的類數組對象里面 arguments 是一個類數組對象,不是一個真正的數組。它類似數組,除了 length 屬性和通過索引獲取元素之外沒有任何數組屬性。這一點可以通過打印它看到 ```javascript function test() { console.dir(arguments); } test('html', 'css', 'js') console.dir(['html', 'css', 'js']) ``` 通過打印結果可以發現,arguments 的原型是 Object,而數組的原型是 Array  那么關于 arguments 是什么 ? 這里做下總結 arguments 是類數組對象(偽數組),即不是一個真正的數組,而是一個對象。它有 length 屬性,并且可以通過下標獲取元素,但是它不能調用數組方法,就是因為它不是真正的數組,這一點可以通過查看它的原型驗證 #### 2. arguments 轉為數組 --- arguments 是類數組對象,不是一個真正的數組,意味著不能使用數組方法,但是可以將它轉換為真正的數組 方法一: 直接遍歷(新手寫法) ```javascript const args = []; for (let i = 0; i < arguments.length; i++) { args.push(arguments[i]) } ``` 方法二: Array.prototype.slice(下面兩種方式都可以) ```javascript const args = Array.prototype.slice.call(arguments) const args = [].slice.call(arguments) ``` 方法三: ES6 語法(下面兩種方式都可以) ```javascript const args = [...arguments] const args = Array.from(arguments) ``` #### 3. 箭頭函數中沒有 arguments ---- arguments 只存在于普通函數中,而在箭頭函數中是不存在的 下面代碼拋出錯誤異常:Uncaught ReferenceError: arguments is not defined ```javascript const arrow = () => { console.log(arguments); } arrow('html', 'css', 'js') ``` 箭頭函數中雖然沒有 arguments,但是可以使用 `...` 接收所有實參 ```javascript const arrow = (...args) => { console.log(args); } arrow('html', 'css', 'js') ```