微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

初始化对象时,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'}

换句话说,多余的括号会被忽略。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?