arguments

為啥會寫這個,前幾天面試的時候,面試官問我,arguments 是數(shù)組么,我說是的。因為在使用的過程中,都是直接用下標和length 去取值,未曾想過調(diào)用一些數(shù)組的方法。面試官說,arguments是一個偽數(shù)組。印象深刻。所以今天看一下。

MDN鏈接

總結(jié):

  • arguments 不是一個數(shù)組,是一個對象 ,可以使用 .length屬性,索引
  • 可以轉(zhuǎn)換成數(shù)組 (為啥要轉(zhuǎn),為啥要修改本不應(yīng)該修改的值)
  • 有 .callee() 方法執(zhí)行函數(shù) (嚴格模式下刪除) 。 .caller() 獲取當(dāng)前的調(diào)用位置 (瀏覽器中輸出為 undefined)

一些小測試

function test(){
console.log(arguments );   //Arguments [123, callee: ?, Symbol(Symbol.iterator): ?] 0: 123 ,callee: ? test() ,length: 1 ,Symbol(Symbol.iterator): ? values(), __proto__: Object
console.log( typeof arguments ); //  object (string類型的)
console.log( Array.isArray(arguments) ); // false
console.log( arguments.__proto__.constructor());  // 空對象  {} ,有對象的原型鏈
console.log(arguments.caller) // 獲取當(dāng)前的調(diào)用函數(shù) , 瀏覽器調(diào)試工具中輸出:undefined
}

描述

arguments對象是所有 (非箭頭) 函數(shù)中都可用的局部變量。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)。此對象包含傳遞給函數(shù)的每個參數(shù),第一個參數(shù)在索引0處。參數(shù)也可以被設(shè)置。
arguments對象不是一個 Array 。它類似于Array,但除了length屬性和索引元素之外沒有任何Array屬性。例如,它沒有 pop 方法。

但是它可以被轉(zhuǎn)換為一個真正的Array:

var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);

// ES2015
const args = Array.from(arguments);
const args = [...arguments];

/*
對參數(shù)使用slice會阻止某些JavaScript引擎中的優(yōu)化 (比如 V8 - [更多信息](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#3-managing-arguments))。如果你關(guān)心性能,嘗試通過遍歷arguments對象來構(gòu)造一個新的數(shù)組。另一種方法是使用被忽視的`Array`構(gòu)造函數(shù)作為一個函數(shù)
*/
var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));

arguments 屬性

  • arguments.callee
    • 指向當(dāng)前執(zhí)行的函數(shù)。
  • arguments.caller
    • 指向調(diào)用當(dāng)前函數(shù)的函數(shù)。
  • arguments.length
    • 指向傳遞給當(dāng)前函數(shù)的參數(shù)數(shù)量。

注意:現(xiàn)在在嚴格模式下,arguments對象已與過往不同。[arguments[@@iterator]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/@@iterator)不再與函數(shù)的實際形參之間共享,同時caller屬性也被移除

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

相關(guān)閱讀更多精彩內(nèi)容

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