为什么JS允许以数组作为键的属性访问?

Yog*_*pta 5 javascript javascript-objects

假设我有一个对象

obj = {
  a : 1
}
Run Code Online (Sandbox Code Playgroud)

我可以通过访问属性aobj["a"]但也可以通过访问属性obj[["a"]]。那怎么可能?

Cer*_*nce 7

对象键始终是字符串(或者很少是符号)。当你做

obj[<expression>]
Run Code Online (Sandbox Code Playgroud)

解释器将尝试将其expression转换为有效的密钥(如果尚未提供的话)。在这种情况下,将其["a"]转换为字符串会导致"a",因此obj["a"]和都会obj[["a"]]起作用。

(当数组隐式地变成原始类型时,就像这里一样,它.join用逗号ed来代替["a"].join(',') === "a"

  • 我从未意识到JS在嵌套数组中尽可能深地转换类型:`[[[[[“ a”]]]]] ==“ a”`的计算结果为true (2认同)