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