“|| =”运算符与CoffeeScript中的“?=”有何不同?

时间:2012-05-05 18:43:52

标签: operators coffeescript assignment-operator

这两者有什么区别?从Ruby开始,只有当apple为null时,我才习惯将apple ||= walrus设置为等于海象。这似乎在JS / CS中是相同的,但是?=似乎做同样的事情。令我困惑的是:

apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9

2 个答案:

答案 0 :(得分:22)

最好的办法是查看生成的JS。

CoffeeScript的:

apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9

JavaScript的:

var apple, walrus;
apple = 0;
walrus = 9;
if (apple == null) apple = walrus;
apple || (apple = walrus);

正如您所看到的,?=显式检查是JS中的nullundefined。这与||=非常不同,后者仅依赖于apple是否为假值。

为了扩展一点apple ||= walrusapple = apple || walrus的意义相同,所以苹果的任何值都会使逻辑短路并且不会改变apple的值。

答案 1 :(得分:3)

?=存在运算符。它会检查nullundefined

||=只是检查变量的值是“非假”,如果我没记错...那么这意味着0为假。