【问题标题】:Difference between ternary (question mark operator) in coffeescript and in javascript?coffeescript和javascript中的三元(问号运算符)之间的区别?
【发布时间】: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

标签: javascript coffeescript


【解决方案1】:

CoffeeScript 中的三元运算符只是一个 if 条件,因为 CoffeeScript 中的所有内容都是一个表达式。所以如下:

condition ? something : somethingElse

变成:

if condition then something else somethingElse

请注意,在您的情况下,尽管您不会写:

if product.prices then product.prices.de else 0

你可能想要:

product.prices?.de or 0

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 2019-07-09
    • 2015-07-16
    • 2016-03-18
    • 2012-04-26
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多