Неожиданный результат при возвращении к троичному оператору из ИЛИ в Javascript - PullRequest
0 голосов
/ 21 февраля 2020

Может кто-нибудь из вас, невероятных и мудрых разработчиков, скажет мне, почему

"yes" || true === true ? "no" : null

возвращает "no"

но

"yes" || (true === true ? "no" : null)

возвращает "yes"?

Это поставило меня в тупик!

Ответы [ 4 ]

1 голос
/ 21 февраля 2020

Оператор ИЛИ (||) является оператором короткого замыкания, поэтому, как только он находит истинное значение, он возвращает его. Во втором случае у вас есть два значения, "yes", и все внутри паренов. Поскольку "yes", непустая строка, является правдивой, для ее возврата будет короткое замыкание.

В вашем первом случае все, что перед ? неявно сгруппировано, так что это то же самое, что сказать ("yes" || true === true) ? "no" : null. Поскольку ("yes" || true === true) оценивает как истинный, мы получим утвердительный вариант троичного, "no".

0 голосов
/ 21 февраля 2020

ИЛИ предназначен для оценки только логических аргументов слева направо, пока не будет найдено первое истинное значение. Если все аргументы не являются логическими, но могут быть оценены, ИЛИ возвращает первое истинное значение, в вашем случае '(true === true? "No": null) "не может быть оценено, тогда он возвращает" да ", потому что это первое значение, которое можно оценить.

let value = false || '0' || 'true';

console.log(value); //returns '0'

PD: Извините за мой плохой английский sh

0 голосов
/ 21 февраля 2020

первый, || (или) возвращает первое истинное значение.

, поэтому здесь:

"yes" || true === true ? "no" : null

будет возвращено «нет», потому что "yes" == true, но не ===, поэтому оно будет смотреть на второе значение что верно, и true === true, это верно.

second, сначала выполнит код внутри (), поэтому (true === true ? "no" : null) вернет "нет", затем "yes" || "no" вернет "yes", потому что это первое истинное значение

0 голосов
/ 21 февраля 2020

Javascript прекратит оценку условного выражения, если будет точно известно, что это значение.

Значения ложных значений в JavaScript равны 0, 0n, null, undefined, false, NaN и пустой string ""

Так как "yes" не является ни одним из них, оно всегда будет иметь значение true.

В вашем первом примере:

"yes" || true === true 

Является ли вычисление условного выражения и истинно, в результате чего троичная операция принимает истинный путь и оценивается как «нет».

Во втором примере

true === true

Условно, но также верно, что приводит к троичная операция снова принимает истинный путь и оценивается как «нет»

Однако, когда OR с «да» сначала, javascript прекращает оценку и просто возвращает «да»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...