好的,CoffeeScript doesn't support ternary operators。
但是当我尝试使用它时,为什么它不会在我脸上爆炸?
coffee> x = (true ? 1 : 2)
true
那里的计算究竟是什么?为什么不产生编译错误?
答案 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})