[TOC] #### 1. arguments 介紹 --- 眾所周知,js 是一門(mén)非常靈活的語(yǔ)言。當(dāng)我們?cè)?js 中調(diào)用一個(gè)函數(shù)時(shí),經(jīng)常會(huì)給函數(shù)傳遞一些參數(shù),js 把調(diào)用函數(shù)時(shí)傳入的全部實(shí)參存儲(chǔ)到一個(gè)叫做 arguments 的類(lèi)數(shù)組對(duì)象里面 arguments 是一個(gè)類(lèi)數(shù)組對(duì)象,不是一個(gè)真正的數(shù)組。它類(lèi)似數(shù)組,除了 length 屬性和通過(guò)索引獲取元素之外沒(méi)有任何數(shù)組屬性。這一點(diǎn)可以通過(guò)打印它看到 ```javascript function test() { console.dir(arguments); } test('html', 'css', 'js') console.dir(['html', 'css', 'js']) ``` 通過(guò)打印結(jié)果可以發(fā)現(xiàn),arguments 的原型是 Object,而數(shù)組的原型是 Array ![](https://img.itqaq.com/art/content/2d88ae9eb4e6ebff38831af2007adb29.png) 那么關(guān)于 arguments 是什么 ? 這里做下總結(jié) arguments 是類(lèi)數(shù)組對(duì)象(偽數(shù)組),即不是一個(gè)真正的數(shù)組,而是一個(gè)對(duì)象。它有 length 屬性,并且可以通過(guò)下標(biāo)獲取元素,但是它不能調(diào)用數(shù)組方法,就是因?yàn)樗皇钦嬲臄?shù)組,這一點(diǎn)可以通過(guò)查看它的原型驗(yàn)證 #### 2. arguments 轉(zhuǎn)為數(shù)組 --- arguments 是類(lèi)數(shù)組對(duì)象,不是一個(gè)真正的數(shù)組,意味著不能使用數(shù)組方法,但是可以將它轉(zhuǎn)換為真正的數(shù)組 方法一: 直接遍歷(新手寫(xiě)法) ```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 語(yǔ)法(下面兩種方式都可以) ```javascript const args = [...arguments] const args = Array.from(arguments) ``` #### 3. 箭頭函數(shù)中沒(méi)有 arguments ---- arguments 只存在于普通函數(shù)中,而在箭頭函數(shù)中是不存在的 下面代碼拋出錯(cuò)誤異常:Uncaught ReferenceError: arguments is not defined ```javascript const arrow = () => { console.log(arguments); } arrow('html', 'css', 'js') ``` 箭頭函數(shù)中雖然沒(méi)有 arguments,但是可以使用 `...` 接收所有實(shí)參 ```javascript const arrow = (...args) => { console.log(args); } arrow('html', 'css', 'js') ```