Ответ 1
Лучше всего было бы посмотреть на получившийся 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
, поэтому любое значение яблока, которое является правдивым, приведет к короткому замыканию логики и не изменит значение яблока.