Инициализировать объект в 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
Надеюсь, вы поймете, что я имею в виду