我不理解下面这段代码的Javascript解释:
var a = ["value"];
console.log(a[0]); // value
console.log(a[[0]]); // value
console.log(a[[[0]]]); // value
//...
为什么数组的值被视为0?
我不理解下面这段代码的Javascript解释:
var a = ["value"];
console.log(a[0]); // value
console.log(a[[0]]); // value
console.log(a[[[0]]]); // value
//...
为什么数组的值被视为0?
这反过来执行以下步骤:EvaluatePropertyAccessWithExpressionKey(baseValue,Expression,strict)。
...它 反过来执行此步骤:ToPropertyKey(propertyNameValue)。
如果您在规范中进一步查看,将转换该表达式为字符串(如果它是对象),并使用ToPrimitive(argument,hint String)。
Symbol.toPrimitive
(如果已定义)或toString
方法。是的,如果最外层括号之间的表达式是数组(可能嵌套),例如[0]、[[0]]等,则传递一个对象。toString()
方法转换为字符串后,将产生逗号分隔的值的字符串。这递归地作用于嵌套数组,因此实际上意味着所有值,无论多么深度嵌套,都会在结果逗号分隔的字符串中显示出来。例如,[[1, 2], 3, [4, [5]]].toString()
的结果是 "1,2,3,4,5"。[[[[[0]]]]].toString()
)解析为 "0"。a["0"]
,它与 a[0]
是相同的。
.toString()
的解释是什么? - Andreasa[~~![]] === a[+[]]
- Endless