javascript - 初始化对象时,javascript属性名称中的双方括号有什么意义?
问题描述
我目前正在查看前段时间编写的一些代码,我不确定为什么以下 2 条语句是相等的,出于某种原因,我选择了第一种方式。
const a = 'foo';
const b = { [[a]]: 'boo' } // This is in code
const c = { [a]: 'boo' } // ES6 way
它们似乎都产生了完全相同的结果。我不确定第一个选项是否是 ES6 之前的有效选项,但是当我在节点 0.10 上尝试时,它没有将它们中的任何一个识别为有效语句。了解为什么双方括号会产生相同的结果会很有帮助。
更新:
在看到评论/答案后,我试图确认双方括号内的表达式是否被视为数组,确实如此。
> const foo = 'foo'
undefined
> const boo = 'boo'
undefined
> const combo = { [foo,boo]: 'foo boo' }
const combo = { [foo,boo]: 'foo boo' } // This doesn't work foo,boo is not a valid expression
^
Uncaught SyntaxError: Unexpected token ','
> const combo = { [[foo,boo]]: 'foo boo' }
undefined
> combo
{ 'foo,boo': 'foo boo' } // Treats expression itself as array and `toString()` gets called on the array producing 'foo,boo' string
解决方案
在 ES6 中,[expression]: value
解释如下:
- 评估
expression
- 将结果转换为字符串
- 使用这个字符串作为键
分别,
given [ [a] ]: 'boo'
evaluate [a] => ['foo']
String ['foo'] => 'foo'
result => {'foo': 'boo'}
换句话说,多余的括号将被忽略。
推荐阅读
- javascript - Javascript 动态模块导入返回未定义
- c++ - 使用不同表达式计算相同整数时的不一致结果
- docker - 无法访问 docker 容器内的 Vue CLI
- ruby-on-rails - Rails 使用 Polymorphic_url 和 STI 在嵌套资源上生成错误路径
- django - 有关 django 应用程序无效主机的错误电子邮件
- angular - Angular 7 应用程序中的 MongoDB Stitch
- wireshark - 如何在 Wireshark 中显示 pcap 文件中的 WEP 密钥
- c# - 将文本右移以在 XAML 中切换
- python - 通过带有 tox 的命令设置 $PATH
- node.js - 如何将nodejs服务器发送的pdf数据转换为angularjs中的pdf