Инициализировать объект в javascript, используя || оператор

Иногда я вижу в javascript код что-то вроде этого:

var myObj = myObj || {};

Итак, что на самом деле происходит здесь? Я полагаю || оператор возвращает true или false, но это неверно.

Ответы

Ответ 1

Оператор || возвращает левый операнд, если он оценивается как истинный, в противном случае он вычисляет и возвращает правый операнд. Другими словами, a || b эквивалентно a ? a : b, за исключением того, что a оценивается только один раз.

Ответ 2

Это инициализирует myObj, если он уже не определен.

Ответ 3

Чтобы понять || оператор, сначала рассмотрим довольно простой пример. Логический оператор OR может использоваться для предоставления значения по умолчанию для определенной переменной следующим образом:

 var bar = false,  
 foobar = 5,  
 foo = bar || foobar; // foo = 5  

В этом случае foo будет присвоено значение foobar, если bar считается ложным. Значение ложности можно считать равным 0, false, undefined, null, NaN или пустым (например, ").

Ответ 4

|| является оператором короткого замыкания. Если первый операнд оценивает значение true, второй не оценивается.

Таким образом, JS a || b является чем-то вроде С# a ?? b

Ответ 5

OR op (||) вернет первый непустой/ложный параметр.

В указанном случае, если myObj является ложным или null, он будет установлен в пустой объект (скобки {} используются для создания объектов)

Ответ 6

Вы можете использовать эту конструкцию для получения объекта, который не является null, undefined и т.д. Это используется в случаях, когда вы используете myObj позже в коде, который требует, чтобы он был объектом. Если по какой-то причине myObj есть undefined до этой строки, повторное назначение его оставляет его undefined или null, и в этом случае ему будет назначено {}.

Вы можете думать об этом как:

// If the object is already defined
if (myObj)
    var myObj = myObj;
// It was undefined or null, so assign an empty object to it.
else
    var myObj = {};

Ответ 7

если myObj равен undefined или null, тогда он вычисляет выражение в правой части ||, которое создает новый пустой объект

поэтому myObj является либо myObj, если он не является ни пустым, ни пустым, если myObj имеет значение null

Надеюсь, вы поймете, что я имею в виду