Что означают две вертикальные линии в значении объекта в javascript? [Дубликат]

Возможное дублирование:
Что делает || оператор делает?

Может быть, кто-нибудь может предоставить лучший фрагмент кода, но что делает|| значит в следующем?:

<code>var time =  $(el).data('start') || new Date();
</code>

Этоor оператор, и если да, то как может иметь значение, что переменная может иметь два разных значения?

 tim peterson05 мая 2012 г., 17:12
Я гуглил, чтобы найти что-то похожее на ссылку, которую вы упомянули, но не смог найти ничего, используя ключевые слова, такие как «два, двойной вертикальной линии JavaScript». Поскольку на простом английском языке было не так много, я решил задать вопрос.
 tim peterson05 мая 2012 г., 17:07
hi @Esailija, спасибо за эту ссылку.
 Esailija05 мая 2012 г., 17:10
Я надеялся, что ты предпринял действие по удалению этого вопроса, поскольку он ничем не отличается от уже заданного и полученного ответа.

Ответы на вопрос(5)

что если первая часть истинна, она ее возвращает. Если первая часть является ложной, она возвращает вторую. Вышеприведенные выражения, следовательно, эквивалентны:

if ($(el).data('start')) {
  time = $(el).data('start');
} else {
  time = new Date();
}

logical sum. var time = $(el).data('start') || new Date(); если$(el).data('start') буду иметьundefined илиfalse значение тогдаtime будет иметь значение отnew Date функция.

 Denis Ermolin05 мая 2012 г., 17:12
Что не так? Да, это не полный список. Лучше сказать как конвертируемые в ложь. Будет выполнено, если $ (el) .data ('start') вернет undefined? или ложь?
 Denis Ermolin05 мая 2012 г., 17:04
логическая сумма является синонимом или
 Denis Ermolin05 мая 2012 г., 17:03
Для downvoters что написано неправильно?
 tim peterson05 мая 2012 г., 17:02
спасибо @ Денис. какlogical sum отличается отor?
 Denis Ermolin05 мая 2012 г., 17:26
Но это не так. Ваш downvote просто для удовольствия.
Решение Вопроса

OR оператор. Что вам нужно понять, это:

Не булевы значения преобразуются в булевы при использовании в логическом операторе. Значения, которые преобразуются вfalse называются «ложными» и значения, которые преобразуются вtrue называются "правдивыми". Ложные значения включают такие вещи, как0, undefined, null, и так далее. Подробнее на Правда и Ложь: когда в JavaScript не все равно.

TheOR операторкороткие замыкани: он продолжает вычислять выражения, пока не обнаружит, что этоtrue, а затем останавливается.

Так,var time = $(el).data('start') || new Date(); означает «набор time наstart данныеel element, OR, если это ложно, используйте текущее время ".

 Yatrix02 мар. 2015 г., 20:44
Просто и прямо к делу - отличный ответ.
 tim peterson05 мая 2012 г., 17:05
hi @apsillers, спасибо за объяснение "фальши" и "правды". Я слышал их раньше, но никогда не знал, что они имели в виду.

$(el).data('start') в переменнуюtime или, если этого не существует или вместо этого возвращаетfalse, вместо этого присваивается значение, возвращаемое изnew Date(). Или, как более четко отметил Маловолио, в комментариях:

...если$(el).data('start') - это «ложь» (то есть неопределенное, ноль, 0, ложь, пустая строка или NaN), затемnew Date() оценивается и присваиваетсяtime.

Важный аспект логического оператора:

Логические операторы обычно используются с логическими (логическими) значениями; когда они есть, они возвращают логическое значение. Тем не менее, && и || операторы фактически возвращают значение одного из указанных операндов, поэтому, если эти операторы используются с небулевыми значениями, они могут возвращать не булевы значения.

Ссылки

Логические операторы.
 tim peterson05 мая 2012 г., 17:03
спасибо @ Дэвид, очень полезно. получил это сейчас.
 Malvolio05 мая 2012 г., 17:05
Точно, если$(el).data('start') - это «ложь» (то есть неопределенное, ноль, 0, ложь, пустая строка илиNaN), тогдаnew Date() оценивается и присваиваетсяtime. Как ни странно, пустые списки и пустые объекты не считаются ложными.
exp1 || exp2 

то exp2 не оценивается (это называется оценкой короткого замыкания). Если exp1 возвращает false, то exp 2 оценивается. Если exp1 ИЛИ exp2 имеет значение true, тогда (exp1 || exp2) оценивается как true.

Но в Javascript вы можете устанавливать значения с помощью оператора.

a = something

if (prop)

a = prop

можно переписать как

a = prop || something

Ваш ответ на вопрос