18

这两者有什么区别?从 Ruby 开始,我习惯于apple ||= walrus仅在 apple 为空时才将 apple 设置为等于 walrus。这在 JS/CS 中似乎是一样的,尽管 ?= 似乎做同样的事情。让我困惑的是:

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

4

2 回答 2

30

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

咖啡脚本:

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);

如您所见,?=显式检查是JSnull中的某物。这与仅依赖于是否是虚假值undefined非常不同。||=apple

再扩展一点apple ||= walrus就等同于apple = apple || walrus,所以任何真实的 apple 值都会使逻辑短路并且不会改变 apple 的值。

于 2012-05-05T18:49:52.707 回答
4

?=存在算子。它检查nullundefined

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

于 2012-05-05T18:48:24.943 回答