2014-12-26 4 views
1

В JavaScriptJavaScript старшинства и ассоциативности

var x = (5 >= 9 >= 0); 
console.log(x); 
// returns true 

Что происходит в этом заявлении, и что является причиной этого выхода?

+0

Это создаст синтаксическую ошибку. Вы имели в виду 'var' вместо' boolean'? –

+0

Как вы думаете, что происходит? – mplungjan

+0

Что вы ожидали вместо «истины»? – Teemu

ответ

3

true заявление, понимается как отличен от нуля ... Следовательно, false является равна нулю ...

Оператор:

(5>=9>=0) 

Превращается в

(false >= 0) 

С 5 ниже, чем 9. Тогда, если ложно, равна нулю, то результат верно

EDIT

Как объяснено здесь (All falsey values in JavaScript), ноль среди falsy значений в JavaScript ...

3

Operator precedence and Associativity chart объясняет, что происходит. Выражение вычисляется в таком порядке:

/* 1 */ x = (5 >= 9) >= 0; 
/* 2 */ x = false >= 0; 
/* 3 */ x = true;  

Пояснение:

  1. >= левоассоциативно оператора от 5 до 9 оценивается в первую очередь.
  2. >= использует абстрактное сравнение, которое преобразует boolean в число i.e. false становится 0 (ref).
  3. Конечный результат: true.
+1

(5> = 9) = true? действительно? –

+0

LOL (false> = 0) = false? –

+1

Реальный вопрос: почему 'false == 0' в нестандартном сравнении – adeneo

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