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

换句话说,额外的括号被忽略。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Javascript对象属性初始化

在javascript中初始化对象时如何使用元素名称?

初始化对象时强制进行属性初始化

初始化对象时,{0}是什么意思?

当 ActiveReferenceCount > 0 时,为什么对象被取消初始化

初始化具有大小的对象的向量时出错

如何在Javascript中初始化类对象

JavaScript中对象成员的创建和初始化顺序

稍后在使用私有对象变量时(初始化对象之后)如何初始化数组

Java:在初始化块中初始化对象时从另一个类调用对象的方法

带有方括号作为属性名称的新对象

在javascript对象初始化中使用数字作为属性有什么好处?

访问初始化对象的内部对象属性时出现 NullPointerException

在javascript中创建新对象时,其中的array属性不会初始化为新对象

混合指针和非指针对象时,对象以什么顺序初始化?

为什么通过指针初始化创建对象的实例时std :: string属性为空

初始化对象-使用名称空间

为什么只有在括号初始化对象时才需要从 int 到 float 的缩小转换?

Python初始化对象的属性

初始化对象的列表属性

如何初始化对象属性

在没有类型的情况下初始化对象时,它会调用什么?

对象初始化-为什么用“:”而不是“ =”初始化对象属性

Spring框架中的对象初始化

未在Ruby中初始化的对象

在Go中初始化空对象

在const对象中初始化引用

在Blazor组件中初始化对象

在delphi中初始化对象