【问题标题】:Why symbol-type key in Object have a bracket around them [duplicate]为什么对象中的符号类型键在它们周围有一个括号[重复]
【发布时间】:2017-11-16 01:43:46
【问题描述】:

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

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

另外,关于迭代器:

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

谁能解释一下这些 [] 在他们周围有什么用?我google了一会儿,没有找到满意的答案,提前谢谢你。

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    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

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

    【讨论】:

      【解决方案2】:

      方括号只是对象字面量语法的一部分。

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

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 2016-04-21
        • 2014-04-08
        • 2023-04-11
        • 2010-10-01
        • 1970-01-01
        • 2015-11-01
        相关资源
        最近更新 更多