为什么不使用三元组?:在CoffeeScript中产生错误?

时间:2014-05-30 17:56:25

标签: coffeescript

好的,CoffeeScript doesn't support ternary operators

但是当我尝试使用它时,为什么它不会在我脸上爆炸?

coffee> x = (true ? 1 : 2)
true

那里的计算究竟是什么?为什么不产生编译错误?

2 个答案:

答案 0 :(得分:4)

问号检查前面的值是否存在,然后返回它,否则返回第二个值。如果a未定义,则a ? b将返回a,否则返回b。所以我们添加了true ? ( 1 : 2 )括号。它检查true是否未定义(它不是)并返回它,否则它将返回一个新对象{1:2}

已编译的javascript看起来像

x = typeof true !== "undefined" && true !== null ? true : {
  1: 2
};

答案 1 :(得分:2)

将来,请查看已编译的JavaScript。

这是完全有效的CoffeeScript,它不会做你认为应该做的事。

您正在使用存在运算符?,并且,如果?的操作数为null或未定义,则返回具有属性1的对象且值为2

更明显的是,它正在这样做:

x = true ? { 1: 2 }

或者

x = (if true then true else {1: 2})