es6 class - 将boolean传递给构造函数

时间:2016-06-21 11:10:54

标签: javascript class constructor boolean ecmascript-6

我试图掌握es6类,我似乎无法将布尔值传递给构造函数。

在以下代码中

autoDisplay

true始终为autoDisplay,无论在创建类的实例时传递给它的是什么,它都采用默认值。

如果我将minSdkVersion 15 targetSdkVersion 23 更改为字符串,则可以正常工作。

您是否无法将布尔值传递给构造函数?

1 个答案:

答案 0 :(得分:3)

false || true始终为true||的评估方式如下:

  • 评估左侧
  • 如果左侧是 truthy ,那就是结果
  • 否则,请评估右侧并使其成为reslt

所以||不是这样做的方法。如果您希望能够提供任何其他虚假价值,例如0""null等,您也会遇到麻烦。

可以使用typeof options.autoDisplay === "undefined""autoDisplay" in options(更多this question及其答案)

this.autoDisplay = typeof options.autoDisplay === "undefined" ? true : options.autoDisplay;

...但您使用的是ES2015(“ES6”),因此您可以使用默认参数参数解构来避免所有样板:

constructor({message = 'default cookie message', autoDisplay = true} = {}) {
    this.message = message;
    this.autoDisplay = autoDisplay;
    console.log(this.message, "|", this.autoDisplay);
}

直播示例:

class site_alert {
  constructor({message = 'default cookie message', autoDisplay = true} = {}) {
    this.message = message;
    this.autoDisplay = autoDisplay;
    console.log(this.message, "|", this.autoDisplay);
  }
}
new site_alert();
new site_alert({autoDisplay:false});
new site_alert({message:"custom message"});

请注意,在我们的功能代码中,我们甚至不再拥有options;在调用函数时,参数将从我们的选项对象中解构出来。

让我们来看看这个宣言:

{message = 'default cookie message', autoDisplay = true} = {}

{message = 'default cookie message', autoDisplay = true}部分说:

  • 第一个(仅在我们的例子中)参数将是我们想要解构的对象(感谢它周围的{}
  • 如果其上没有message属性,则默认为“默认Cookie消息”
  • 如果没有'autoDisplay'属性,则默认为true

...而= {}部分说:如果没有给出参数,则默认为空白对象(之后上面的两个默认值将开始)。

旁注:JavaScript中压倒性的约定是构造函数(类)使用大写首字母(通常在CappedCamelCase中)编写,因此SiteAlert而不是site_alert。你不必遵循惯例,但如果你不知道就把它标记出来。