数组的Javascript索引是数组

Raf*_*ida 7 javascript arrays

我不明白下一行代码的 Javascript 解释:

var a = ["value"];
console.log(a[0]); // value
console.log(a[[0]]); // value
console.log(a[[[0]]]); // value
//...
Run Code Online (Sandbox Code Playgroud)

为什么将数组视为值 0?

tri*_*cot 2

括号表示法用作属性访问器,并在ECMAScript 语言规范 的“属性访问器”一章下定义。方括号内的表达式在步骤 4 中处理为:

EvaluatePropertyAccessWithExpressionKey(baseValue、表达式、严格)。

...依次执行以下步骤:

ToPropertyKey(属性名称值)。

...依次执行此步骤:

ToPrimitive(参数,提示字符串)。

...如果您进一步深入规范,将使用Symbol.toPrimitive(如果已定义) 或toString方法将该表达式转换为字符串(如果它是对象)。是的,如果最外层括号之间的表达式是一个数组(可能是嵌套的),例如 [0] 或 [[0]],...等,则传递一个对象。

转换为字符串的数组(使用其toString()方法)将生成其值的逗号分隔字符串。这会递归地应用于嵌套数组,因此这实际上意味着所有值,无论嵌套多深,都会出现在结果逗号分隔的字符串中。例如[[1, 2], 3, [4, [5]]].toString()“1,2,3,4,5”。

在您的示例中,数组中始终只有一个值 0,您将其作为表达式传递给外括号对。因此该表达式(例如[[[[[0]]]]].toString())解析为“0”。

所以我们得到a["0"], 这与 是一样的a[0]