Square Brackets Javascript对象密钥

lch*_*bon 79 javascript

任何人都可以解释为什么/如何在javascript中分配键的以下方法有效?

a = "b"
c = {[a]: "d"}
Run Code Online (Sandbox Code Playgroud)

返回:

Object {b: "d"}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ira 119

这是新的ES2015(EcmaScript规范,正式称为ES6)计算属性名称语法.这someObject[someKey]是你从ES3/5中得知的作业的简写:

var a = "b"
var c = {[a]: "d"}
Run Code Online (Sandbox Code Playgroud)

语法糖是:

var a = "b"
var c = {}
c[a] = "d"
Run Code Online (Sandbox Code Playgroud)

  • 因此,直到 ES2022,[ ] 可以是数组文字构造函数、属性访问器、计算属性名称、解构赋值、绑定元素 (/sf/answers/2638409651/)。我怀疑还有更多。 (8认同)
  • 是的...说实话,JavaScript 现在有点混乱。厨师太多的情况。 (3认同)

小智 18

const animalSounds = {cat: 'meow', dog: 'bark'};

const animal = 'lion';

const sound = 'roar';

{...animalSounds, [animal]: sound};
Run Code Online (Sandbox Code Playgroud)

结果将是

{cat: 'meow', dog: 'bark', lion: 'roar'};

Run Code Online (Sandbox Code Playgroud)


hyg*_*ull 13

实际上,在创建JavaScript 对象时,的使用[]提供了一种使用变量的实际值作为/属性的绝妙方法。

我对上面的答案非常满意,对此我表示赞赏,因为它使我可以举一个小例子。

我已经在Node REPL(Node shell)上逐行执行了代码。

> var key = "fullName";     // Assignment
undefined
>
> var obj = {key: "Rishikesh Agrawani"}    // Here key's value will not be used
undefined
> obj     // Inappropriate, which we don't want
{ key: 'Rishikesh Agrawani' }
>
> // Let's fix
undefined
> var obj2 = {[key]: "Rishikesh Agrawani"}
undefined
> obj2
{ fullName: 'Rishikesh Agrawani' }
>
Run Code Online (Sandbox Code Playgroud)

  • 很好的例子!他们会更好地解释此功能。 (2认同)

Eld*_*bek 6

[]此外,当我们在评估或运行时之前还不知道对象会是什么时, 只有使用符号来访问或分配对象中的内容的条件。