解构赋值和空合并

时间:2014-09-15 15:07:12

标签: coffeescript

对于CoffeeScript中的单个赋值,您可以使用存在运算符:

name = obj?.props?.name

这会产生相当长的代码块,会检查objprops是否已定义。

name = typeof obj !== "undefined" && obj !== null ? 
    (_ref2 = obj.props) != null ?
    _ref2.name : void 0 : void 0;

考虑更复杂的解构分配:

{name: name, emails: [primary], age: age} = Person.get(id)

如果对象不包含emails属性,则该代码将抛出TypeError。有没有办法将存在运算符用于这些类型的解构赋值?

这是我迄今为止最好的选择:

{name: name, emails: emails, age: age} = Person.get(id)
primary = emails?[0]

2 个答案:

答案 0 :(得分:1)

在ES6中,您可以这样做:

const {name: name, emails: [primary] = [], age: age} = Person.get(id)

如果Person.get(id)返回空对象,则primary将为undefined(不会引发TypeError)。

即将推出的CoffeeScript 2也支持此功能,您可以在http://coffeescript.org/v2/#try

尝试

答案 1 :(得分:0)

我在2月份提交了an issue about this。似乎有一些支持,但尚未分配或实施。