【问题标题】:JavaScript property accessors wrapped in array [duplicate]包裹在数组中的JavaScript属性访问器[重复]
【发布时间】:2017-01-03 13:33:00
【问题描述】:

我找不到有关以下工作方式/原因的文档:

const data = {one: 1, two: 2}
const key = ['one']

data[key[0]] // 1
data[key] // 1
data[[key]] // 1  
data[[[key]]] // 1
data[[[[key]]]] // 1
data[['one', 'two']] // undefined

什么允许任意数量的方括号将键括起来并仍然成功地在对象中找到键? array.length === 1 时是否有特定行为?如果是这样,我在哪里可以找到相关文档或说明?

【问题讨论】:

  • 记录在Array#toString()
  • 仅供参考,此行为并非特定于 ES 6。如果您将 const 替换为 var,则效果相同。

标签: javascript arrays properties


【解决方案1】:

当使用object[key] 括号表示法访问属性时,key 被转换为字符串。* 数组的字符串表示形式是其元素的字符串表示形式与, 连接。对于单元素数组,这与其唯一元素的字符串表示相同。

const foo = {'a,b': 2};
console.log(foo[['a', 'b']]); // 2;

* 或者一个符号。

【讨论】:

  • ['a'].toString() => 'a',知道了,谢谢!
【解决方案2】:

当您使用方括号访问属性时,键始终转换为字符串。如果将数组转换为字符串,结果与在数组上调用join() 方法相同。因此,将一个数组转换为字符串,该数组仅包含一个元素,即字符串会导致该元素本身。但是,当数组包含两个字符串元素(如['one', 'two'])时,将其转换为字符串会产生'one,two',而data 变量不包含该键。

【讨论】:

    猜你喜欢
    • 2019-08-06
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2013-06-04
    • 2016-09-14
    • 1970-01-01
    相关资源
    最近更新 更多