2013-03-11 2 views
4

Может ли кто-нибудь объяснить это?JavaScript triple equals и сравнение с тремя переменными

1 == 1  //true, as expected 
1 === 1  //true, as expected 
1 == 1 == 1 //true, as expected 
1 == 1 == 2 //false, as expected 
1 === 1 === 2 //false, as expected 
1 === 1 === 1 //false? <-- 

также есть имя для булевой логики, которая сравнивает более двух чисел таким образом (я его назвал «три-переменное сравнение», но я думаю, что это было бы неправильно ...)

+0

[Вот подробное сравнение как оператора в JavaScript с помощью теста производительности] (http://conceptf1.blogspot.com/2014/01/ javascript-triple-equals-vs-double-equals-operations.html) –

ответ

8

Это выражение:

1 === 1 === 1 

оценивается как:

(1 === 1) === 1 

После оценки выражения в круглых скобках:

true === 1 

И это выражение логически ложно. Ниже выражение возвращает true, как ожидается, хотя:

1 === 1 === true 
+1

Ха-ха, должен был протестировать больше: '5 == 5 == 5' также является ложным, а потому, что' 1 == true', я сбился с пути используя мой пример '1 == 1 == 1'. +1 спасибо! – stackunderflow

+0

Еще один вопрос: могу ли я сделать то, что хочу, без утомительного выражения (например, 'x === y && y === z && x === z')? – stackunderflow

+0

@DuncanNZ Существуют ли всегда три переменные? –