为什么';t使用三元?:在CoffeeScript中产生错误?

为什么';t使用三元?:在CoffeeScript中产生错误?,coffeescript,Coffeescript,好的,那么 但是当我尝试使用它时,为什么它不会在我脸上爆炸呢 coffee> x = (true ? 1 : 2) true 计算结果到底是什么?为什么它不会产生编译错误?将来,请查看编译后的JavaScript 这是非常有效的咖啡脚本,它只是没有做你认为它应该做的 您正在使用存在运算符,?,如果?的操作数为null或未定义,则返回一个属性为1且值为2的对象 更清楚地说,它是这样做的: x = true ? { 1: 2 } 或 问号检查前面的值是否存在,然后返回它,否则返回第二个值a

好的,那么

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

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

计算结果到底是什么?为什么它不会产生编译错误?

将来,请查看编译后的JavaScript

这是非常有效的咖啡脚本,它只是没有做你认为它应该做的

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

更清楚地说,它是这样做的:

x = true ? { 1: 2 }


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

编译后的javascript看起来像

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