【发布时间】:2016-08-19 20:10:09
【问题描述】:
我的代码中有这一行:
de: (_.max(data, (product) -> product.prices.de )).price.de
我想首先检查 product.prices 是否已定义,如果已定义则返回 product.prices.de 否则返回 0。
在javascript中我会写这样的东西:
angular.isDefined(product.prices) ? product.prices.de : 0
但是当我在咖啡脚本中尝试同样的事情时,咖啡机不接受它。有什么提示吗? coffeescript和javascript在查询运算符的使用上有区别吗?
编辑:
我会写
de: (_.max(data, (product) -> product.prices?.de )).prices.de
但在这种情况下,如果 product.prices 不存在,则函数返回 null 而不是 0
【问题讨论】:
-
product.priced ?将检查它是否是假的,而不是如果它被定义:例如""也是假的 - 所有对象都是真的,但需要注意。 -
是的,可以说是 angular.isDefined(product.price)
-
啊,我以为你问的是 CoffeeScript 中的
??运算符(它的作用类似于isDefined检查)而不是三元运算符。在 CoffeeScript 中,事物都是表达式,所以您只需执行if product.prices then product.prices.de else 0 -
再想一想,你只需要
product.prices?.de ?? 0。 -
@BenjaminGruenbaum 是的,我知道,但我只是想知道是否有类似于 javascript 问号运算符的东西,例如
condition ? value-if-true : value-if-false