Я нашел код в javascript, который создает объект. Но я точно не знаю, что именно делает этот код.Переменная JavaScript с конвейером
Объяснение будет оценено.
Я нашел код в javascript, который создает объект. Но я точно не знаю, что именно делает этот код.Переменная JavaScript с конвейером
Объяснение будет оценено.
Посмотрите на двойную трубу как на логический ИЛИ.
var a = a OR { };
которые в значительной степени означает, что если a
имеет truthy значения Javascript (перо) назначить a
к a
, в противном случае назначить новую объектную ссылку.
Она устанавливает в качестве значения переменной a
либо:
копию текущего значения a
, если a
существует и примитивный тип
ссылку на текущее значение a
, если a
существует и является сложным типом
новый объект, если a
не существует
если a
является undefined
или false
набор a = {}
Первый шаг здесь, чтобы понять, что это действительно становится этим:
var a;
a = a || {};
... и что var a
является не оп если переменная a
уже была объявлена ранее в текущей области.
Итак, первая часть (var a
) гарантирует, что a
существует как переменная, если ее еще нет.
Вторая часть затем говорит: Если a
имеет «правдивое» значение, сохраните его (не меняйте его). Если он имеет значение «ложь», назначьте {}
на номер a
.
Значения "falsey" являются 0
, NaN
, null
, undefined
, ""
, и конечно же, false
. Истинные значения - все остальные.
Это работает из-за JavaScript's curiously-powerful ||
(logical OR) operator, который, в отличие от некоторых других языков, не всегда приводит к true
или false
; вместо этого он оценивает левый операнд и, если это правда, принимает это значение как результат; в противном случае он оценивает правый операнд и использует его в качестве результата.
его, как обычный, если условие (кажется тройной оператор) проверка булевы и присвоения значения
http://stackoverflow.com/a/476445/ – chridam
'' || есть короткое замыкание или. Код проверяет, является ли true. Если нет, то a присваивается пустой объект. – A1rPun