【问题标题】:What is this syntax: {variable1, variable2, variable3}? [duplicate]这个语法是什么:{variable1, variable2, variable3}? [复制]
【发布时间】:2017-08-05 20:49:30
【问题描述】:

看到下面的ES6代码,一头雾水:

class GuitarAmp {
  constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' } = {}) {
    Object.assign(this, {
      cabinet, distortion, volume
    });
  }
}

Object.assign 的第二个参数是什么?它不是一个对象,那它是什么?我刚刚注意到它也是构造函数参数的一部分,这部分:

{ cabinet = 'spruce', distortion = '1', volume = '0' } = {}

我不熟悉这种新语法,所以我不知道如何查找它,因为我不知道它叫什么。有人知道这个词吗?

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

它是一个使用简写语法的对象字面量。它只是语法糖。

var a = "A";
var b = "B";
var c = "C";

这两个是一样的:

{ a: a, b: b, c: c }
{ a, b, c }

换句话说,如果你将一个变量放入对象字面量中,那么属性名称将成为变量名称的名称。

【讨论】:

    【解决方案2】:

    所以,在上面的代码中,我相信:

    {
      cabinet, distortion, volume
    }
    

    在 ES5 中:

    {
       cabinet: cabinet,
       distortion: distortion,
       volume: volume,
    }
    

    这只是写对象的一种简短形式,当键和值相同时。

    【讨论】:

    • 有趣的事实:这也适用于函数。 function myFunction() {}var obj = { myFunction }。或:var obj = { myFunction() {} }.
    • 我想提醒未来的读者,这种语法只适用于先前声明的变量,并且不允许使用文字。var d = {'a', 'b', 'c'} 会出错。说得通。它只是将一些变量分组到一个对象中的简写。
    【解决方案3】:

    第一个参数的默认值为{},但如果提供,我们在第一个参数对象中嵌套了默认值,如cabinet = 'spruce', distortion = '1', volume = '0'

    因此,如果提供了第一个对象参数,例如{ cabinet = 'test', distortion = '4', volume = '2' } 那么,this 会如下

    { 
      cabinet: 'test', 
      distortion: '4', 
      volume: '2' 
    }
    

    否则,它将具有参数中提供的默认值。

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2019-03-05
      • 2019-12-08
      • 2011-10-27
      • 1970-01-01
      相关资源
      最近更新 更多