为什么Object中的符号类型键有一个括号

时间:2017-11-16 01:43:46

标签: javascript ecmascript-6

我刚开始使用JS,想知道为什么围绕Symbol有[]。例如:在一个对象中。

var bow = {
    [Symbol('apple')] : something,
    [Symbol('banana')] : something, 
    ....
}

另外,谈到迭代器:

var iterableObject = {
    [Symbol.iterator] : function() {.....}
}

任何人都可以解释一下这些[]的用途吗?我用谷歌搜索了一段时间,但没有找到满意的答案,提前谢谢你。

2 个答案:

答案 0 :(得分:0)

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors

括号表示法只是访问对象属性的另一种方法。特别是,当属性名称无法与点表示法一起使用时使用它,例如Symbol.iterator

您可能还想查看计算属性名称:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names

这些类似,但用于在定义对象时设置属性,而不是从已定义的对象中获取属性。

答案 1 :(得分:0)

方形行李只是对象文字语法的一部分。

使用对象文字语法创建对象时,现在可以使用变量来设置对象内的键。

const string = 'whatever'
const normalObject = {
    [string]: 'something else'
}

这导致normalObject有一个属性,'whatever'指向'something else'

// normalObject
{ whatever: 'something else' }

在对象文字语法中使用括号只是为了允许您使用变量来设置对象中的键。

将这个回到您的示例中,这只是允许您在对象中使用符号作为键。

您可能已经注意到这有点奇怪。直到最近,一个对象只能有String个密钥。符号不是你可以用作对象中的键的另一种东西。

var bow = {
    [Symbol('banana')] : something,
    [Symbol('banana')] : something, 
    ....
}

这将导致一个对象有两个不同的Symbol(banana)指向something