javaScript中的Arguments對象

1.搞清楚什么是arguments

“arguments?是一個對應(yīng)于傳遞給函數(shù)的參數(shù)的類數(shù)組對象。?arguments對象是所有(非箭頭)函數(shù)中都可用的局部變量。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)。此對象包含傳遞給函數(shù)的每個參數(shù),第一個參數(shù)在索引0處?!? ?-- MDN

首先它是一個類數(shù)組對象,typeof arguments結(jié)果毫無疑問是"object",注意結(jié)果是字符串類型。接下來調(diào)用Object.prototype.toString.call(arguments),結(jié)果是從未見過的"[object Arguments]"。

2.轉(zhuǎn)換為數(shù)組

1.Array的silce方法

Array.prototype.slice.call(arguments)

2.Array.from

let re = Array.from(arguments)

3.拓展運(yùn)算符

let re = [...arguments]

3.arguments到類數(shù)組

類數(shù)組必須有l(wèi)ength屬性,具有索引屬性,下面結(jié)合代碼說明:

let obj = {

? ? ? ? ? ? "0": 'a',

? ? ? ? ? ? "1": 'b',

? ? ? ? ? ? "2": 'c',

? ? ? ? ? ? length: 3,

? ? ? ? ? ? "push": Array.prototype.push,

? ? ? ? ? ? "splice": Array.prototype.splice

? ? ? ? }

? ? ? ? obj.push('d')

? ? ? ? console.log(obj)?


控制臺

實(shí)際執(zhí)行過程相當(dāng)于:

obj[obj.length] = 'd';

obj.length++;

4.面試題

var length = 10;

? ? ? ? function fn(){

? ? ? ? ? ? console.log(this.length)

? ? ? ? }

? ? ? ? var obj = {

? ? ? ? ? ? length: 5,

? ? ? ? ? ? getF: function(fn) {

? ? ? ? ? ? ? ? fn();

? ? ? ? ? ? ? ? arguments[0]();

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? obj.getF(fn);

考察的是arguments和this指向問題,結(jié)果為10 1.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容