2016-01-10 2 views
1

Приложил пример с двумя условиями if. Первое условие if работает как ожидалось. Второе, если условие возвращает 11, но почему? Я знаю, что второе условие, если это неправильно, но я хотел бы понять, почему Javascript возвращает в этом случае 11.Логический оператор || возвращает число вместо логического значения

function exception(number) { 
// if(number === 10 || number === 11) { // Working as expected 
    if(number === 10 || 11) { // Why 11? 
     console.log(number); 
    } 
} 

function loop(f) { 
    for (i = 0; i <= 100; i++) { 
     f(i); 
    } 
} 

loop(exception); 
+1

Возможный дубликат [Два символа трубы (OR) в этой строке Javascript] (http://stackoverflow.com/questions/10358823/two-pipe-symbols-or-in-this-javascriptline) – J0B

+0

Любые неизолированные символы -zero number считается правдивым и вернет 'true' при преобразовании в boolean. –

+0

fyi: иногда удобно использовать 'if ([10,11] .indexOf (number)! == -1)' – adeneo

ответ

5

Некоторые сведения о том, что вы, где пытаются достичь:

  • number === 10 || number === 11 является так же, как (number === 10) || (number === 11)
  • number === 10 || 11 такая же, как (number === 10) || (11) это не сравнить 11 с number здесь

Теперь давайте внимательнее посмотрим на number === 10 || 11:

  • number === 10 будет true если номер Порядковый номер типа и равный 10
  • если первый был ложным, оно будет оценивать логическое значение следующего оператора : 11 (которым принимается как истинное, ибо неоспоримым число не равно 0)
+0

Вы можете добавить объяснения относительно приоритета оператора – KarelG

+0

@CodeiSir: Спасибо. Теперь я понял. –

5

от this question.

(expr1 || expr2) 

"Возвращает expr1, если оно может быть преобразовано в истинно, в противном случае возвращает expr2."

source

Так что, когда expr1 является (или вычисляет) один из этих 0,"",false,null,undefined,NaN, то expr2 возвращается, в противном случае expr1 возвращается

+0

Мне нравится этот ответ, потому что вы на самом деле обращаетесь * почему * условное выражение возвращается 11 –

+0

Я думаю, он знает, что проблема в том, что он думал 'number === 10 || номер === 11' будет таким же, как 'number === 10 || 11' – CoderPi

0

потому что Boolean(11) является true (попробуйте на консоли)

так что даже если первое условие неверно (если число не равно 10), тогда всегда будет всегда второе условие

Смежные вопросы