这两者有什么区别?来自Ruby,我习惯了apple ||= walrus
仅当 apple 为空时,才将 apple 设置为等于 walrus。这在 JS/CS 中似乎是一样的,尽管 ?= 似乎做同样的事情。让我困惑的是:
apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9
笏
最佳答案
最好的办法是查看生成的 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);
如您所见,
?=
明确检查某事是 null
或 undefined
在 JS 中。这与 ||=
非常不同。这仅取决于 apple
是一个假值。进一步扩展
apple ||= walrus
等同于 apple = apple || walrus
,所以任何真实的apple值都会使逻辑短路,不会改变apple的值。
关于operators - "||="运算符与 CoffeeScript 中的 "?="有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464891/