对于CoffeeScript中的单个赋值,您可以使用存在运算符:
name = obj?.props?.name
这会产生相当长的代码块,会检查obj
和props
是否已定义。
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]
答案 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。似乎有一些支持,但尚未分配或实施。