这两者有什么区别?从Ruby开始,只有当apple为null时,我才习惯将apple ||= walrus
设置为等于海象。这似乎在JS / CS中是相同的,但是?=似乎做同样的事情。令我困惑的是:
apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9
笏
答案 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中的null
或undefined
。这与||=
非常不同,后者仅依赖于apple
是否为假值。
为了扩展一点apple ||= walrus
与apple = apple || walrus
的意义相同,所以苹果的任何值都会使逻辑短路并且不会改变apple的值。
答案 1 :(得分:3)
?=
是存在运算符。它会检查null
和undefined
。
||=
只是检查变量的值是“非假”,如果我没记错...那么这意味着0
为假。