【问题标题】:Why does JS allow property access with an array as key?为什么 JS 允许以数组为键的属性访问?
【发布时间】:2020-03-12 09:45:05
【问题描述】:

假设我有一个对象

obj = {
  a : 1
}

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

【问题讨论】:

标签: javascript javascript-objects


【解决方案1】:

对象键总是字符串(或者,很少是符号)。当你这样做时

obj[<expression>]

解释器将尝试将expression 转换为有效的密钥,如果它还不是一个。在这种情况下,将["a"] 转换为字符串会产生"a",因此obj["a"]obj[["a"]] 都可以工作。

(当一个数组被隐式转换为一个原始数组时,就像这里一样,它得到.join由逗号表示,["a"].join(',') === "a"

【讨论】:

  • 我从来没有意识到 JS 在嵌套数组中尽可能深地转换类型:[[[["a"]]]] == "a" 计算结果为 true
  • 我们在做的时候,为什么 JS 会这样呢?
  • @YogeshGupta 与什么相反,抛出错误?其中一些与 JS 的类型松散有关 - 解释器可能 try 自动进行类型转换以获得结果而不抛出异常。这有点令人困惑,这就是为什么我更喜欢 Typescript,它会禁止这种隐式转换
猜你喜欢
  • 1970-01-01
  • 2017-02-21
  • 2014-10-17
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2021-10-12
  • 2022-12-23
  • 2012-01-27
相关资源
最近更新 更多