Что означают две вертикальные линии в значении объекта в javascript?
Возможный дубликат:
Что делает || оператор?
Может быть, кто-то может предоставить лучший фрагмент кода, но что означает ||
в следующем?:
var time = $(el).data('start') || new Date();
Является ли это оператором or
, и если да, то как имеет смысл, что переменная может иметь два разных значения?
Ответы
Ответ 1
Это оператор OR
. Что вам нужно понять:
-
Небулевые значения преобразуются в логическое значение при использовании в логическом операторе. Значения, которые преобразуются в false
, называются "ложными", а значения, которые преобразуются в true
, называются "правдивыми". Значения фальши включают такие вещи, как 0
, undefined
, null
и т.д. Подробнее в Truthy and Falsy: когда все не равно в JavaScript.
-
Короткие замыкания оператора OR
: он продолжает оценивать выражения до тех пор, пока не найдет на нем true
, а затем остановится.
Итак, var time = $(el).data('start') || new Date();
означает "установить time
в данные start
элемента el
, OR, если эта ложность использует текущее время".
Ответ 2
Это означает "или". В этом случае он присваивает значение $(el).data('start')
переменной time
или, если это не существует или вместо этого возвращает false
, вместо этого присваивается значение, возвращаемое из new Date()
. Или, что более четко отмечено Маловолио, в комментариях:
... if $(el).data('start')
является "ложным" (то есть undefined, null, 0, false, пустой строкой или NaN), тогда new Date()
оценивается и присваивается time
.
Важный аспект логического оператора:
Логические операторы обычно используются с логическими (логическими) значениями; когда они есть, они возвращают логическое значение. Однако && и || операторы фактически возвращают значение одного из указанных операндов, поэтому, если эти операторы используются с небулевыми значениями, они могут возвращать небулево значение.
Литература:
Ответ 3
exp1 || exp2
вычисляет exp1. Если exp1 истинно, exp2 не оценивается (известная как оценка короткого замыкания). Если exp1 возвращает false, тогда вычисляется exp 2. Если exp1 OR exp2 истинно, тогда (exp1 || exp2) оценивается как истина.
Но в Javascript вы можете установить значения с помощью оператора.
a = something
if (prop)
a = prop
можно переписать как
a = prop || something
Ответ 4
Как работает оператор || оценивается, что если первая часть имеет значение true-ish, она возвращает ее. Если первая часть ложна, она возвращает вторую.
Вышеприведенные выражения поэтому эквивалентны:
if ($(el).data('start')) {
time = $(el).data('start');
} else {
time = new Date();
}
Ответ 5
Это означает logical sum
. var time = $(el).data('start') || new Date();
, если $(el).data('start')
будет иметь значение undefined
или false
, тогда time
будет иметь значение от функции new Date
.