这两者有什么区别?从 Ruby 开始,我习惯于apple ||= walrus
仅在 apple 为空时才将 apple 设置为等于 walrus。这在 JS/CS 中似乎是一样的,尽管 ?= 似乎做同样的事情。让我困惑的是:
apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9
笏
这两者有什么区别?从 Ruby 开始,我习惯于apple ||= walrus
仅在 apple 为空时才将 apple 设置为等于 walrus。这在 JS/CS 中似乎是一样的,尽管 ?= 似乎做同样的事情。让我困惑的是:
apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9
笏
最好的办法是查看生成的 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 的值。
?=
是存在算子。它检查null
和undefined
。
||=
如果我没记错的话,只需检查变量的值是否为“非假”......所以这意味着0
是假的。