Что означают две вертикальные линии в значении объекта в 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.