Мне нравится ||=
механизм Руби . Если переменная не существует или есть nil
, создайте ее и установите равной чему-нибудь:
amount # is nil
amount ||= 0 # is 0
amount ||= 5 # is 0
Сейчас мне нужно сделать что-то подобное в JavaScript. Каковы правила или правильный способ сделать это? Я знаю, что ||=
это неверный синтаксис. 2 очевидных способа справиться с этим:
window.myLib = window.myLib || {};
// or
if (!window.myLib)
window.myLib = {};
x
является ложным, напримерfalse
, и вы хотите установить значение по умолчанию, только еслиx
оно не определено.let amount = 0;
с последующимamount = amount || 5
изменением суммы на 5. Если вы не хотите, чтобы это произошло, используйте??
оператор вместо||
.amount ??= 5;
.Вы можете использовать логический оператор ИЛИ,
||
который оценивает свой правый операнд, еслиlVal
значение ложное.Ложные значения включают, например,
null, false, 0, "", undefined, NaN
источник
x
является ложным, напримерfalse
, и вы хотите установить значение по умолчанию, только еслиx
оно не определено.Если вы работаете с объектами, вы можете использовать деструктуризацию (начиная с ES6) следующим образом:
... но вы ничего не получите от принятого ответа, кроме путаницы.
источник
Оператор, о котором вы спрашивали , был предложен как функция в JavaScript . В настоящее время он находится на этапе 3 , поэтому он еще не является официальной частью языка, но он будет принят с минимальными изменениями в случае обнаружения серьезных неожиданных проблем.
Теперь вы можете использовать его, используя плагин Babel-предложения-логического-присваивания-надстройки . Я никогда не использовал этот плагин, поэтому понятия не имею, насколько хорошо он работает.
источник
Оператор Ruby || = сокращает присвоение. Это можно представить так:
Итак, в javascript это выглядит очень похоже:
Однако, как указано в комментариях ниже, эта буквальная форма рубина менее эффективна, чем стандартная идиома javascript a = a || б.
Для справки: http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
источник
a = a || b
форма более оптимальна. Jsperf.com/x-or-x-equals-0-vs-x-equals-x-or-0/3a = a || b
.a || (a = b)
имеет правильную семантику для вывода имен функций. В настоящее время обсуждается новое предложение.Вы можете добиться желаемого поведения, используя оператор | = в javascript только для целых чисел. Но сначала вы должны определить переменную.
Для объектов
Для массивов
источник
|
или|=
. Желаемое поведение в вопросе не связано с поразрядными операциями.