Ruby || = (или равно) в JavaScript?

Мне нравится механизм 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 = {};

Ответ 1

Оба абсолютно правильны, но если вы ищете что-то, что работает как ||= в рубине. Первый метод, который variable = variable || {} - тот, который вы ищете:)

Ответ 2

Вы можете использовать логический оператор ИЛИ || который оценивает свой правый операнд, если lVal является ложным значением.

Ложные значения включают, например, null, false, 0, "", undefined, NaN

x = x || 1

Ответ 3

Если вы работаете с объектами, вы можете использовать деструктурирование (начиная с ES6) следующим образом:

({ myLib: window.myLib = {} } = window);

... но вы не получаете ничего из принятого ответа, кроме путаницы.

Ответ 4

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