Подтвердить что ты не робот

Как оператор "|| =" отличается от "? =" В CoffeeScript?

В чем разница между этими двумя? Из Ruby я привык к apple ||= walrus настройке яблока равным моржу, только если яблоко равно null. Это похоже на то, что в JS/CS, хотя? = Похоже, делает то же самое. Меня смущает следующее:

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

Ват

4b9b3361

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

Ответ 2

?= - оператор экзистенциальный. Он проверяет соответствие null и undefined.

||= просто проверяет значение переменной как "не false", если я правильно помню... так что означает 0 false.