2015-02-16 3 views
-2

Моя цель - «выполнить код, когда равны только a, b и c». я понял два кода:в JS, являются (a === b === c) и ((a === b) && (a === c) && (b === c)) то же самое? // извините за мое незнание

код # 1:

if (a===b===c) {console.log('something')}; 

код # 2:

if ((a===b)&&(a===c)&&(b===c)) {console.log('something')}; 

Я пытался как и понял, что только "код # 2" в состоянии ответить моя цель (выполняется только тогда, когда три переменные эквивалентны (например, a=b=c), Но для «кода № 1» он выполняется всякий раз, когда есть две эквивалентные переменные (например, a=b или b=c ..)

мой вопрос: "В чем разница между кодом # 1 и код # 2?"

+6

Что такое флаг 'c'? –

+14

Я уверен, что это не значит, что вы думаете, что это значит. найдите разницу между «=» и «==». Затем, в Javascript, «===» станет важным. – Almo

+3

код # 2 имеет избыточное сравнение: просто проверьте, 'if a == b && b == c' достаточно – fcalderan

ответ

3

То, что вы на самом деле ищете, вероятно,

if (a === b === c) 

против

if ((a === b) && (b === c) && (a === c)) 

И они не равны. Первым можно резюмировать следующим образом:

if ((a === b) === c) 

Что, если а и Ь равны, вычисляется в

if (true === c) 

который не является такой же, как проверка, если все три равны.

+2

Заметим, что '===' транзитивен, поэтому '(a === b) && (b === c)' достаточно – Cimbali

+0

@Cimbali Хорошо, я об этом не думал и слепо следовал стилю предложенный вопрос. – Nit

+0

thx q ,, и извините за незнание ,, – NERDYLIZARD

1

Я попытаюсь объяснить разницу. Объяснить первый пример кода:

if (a=b=c) {console.log('something')}; 
// Code above means: if (c) {console.log('something')}; 
// So if Boolean(c) is false, console.log will not work 

Объяснения второго примера:

if ((a=b)&&(a=c)&&(b=c)) {console.log('something')}; 
// Code above means: if (b && c && c) {console.log('something')}; 
// So if Boolean(c) or Boolean(b) is false, console.log will not work 

Оператор присваивания присваивает значение левого операнда на основе значения правого операнда и возвращает значение его права операнд.

+0

Хорошо, он, наконец, отредактировал вопрос, чтобы понимать, что мы думаем, что он имел в виду. Так что этот ответ не то, что он искал. Хорошая попытка, хотя. :) – Almo

1

Времени для таблицы истинности ... Последние две колонок являются выражением вы сравниваете

A  | B  | C  | A == B | (A == B) == C | A == B && B == C 
--------+-------+-------+-----------+---------------+----------------- 
TRUE | TRUE | TRUE | TRUE  | TRUE   | TRUE 
TRUE | TRUE | FALSE | TRUE  | FALSE   | FALSE 
TRUE | FALSE | TRUE | FALSE  | FALSE   | FALSE 
TRUE | FALSE | FALSE | FALSE  | TRUE   | FALSE 
FALSE | TRUE | TRUE | FALSE  | FALSE   | FALSE 
FALSE | TRUE | FALSE | FALSE  | TRUE   | FALSE 
FALSE | FALSE | TRUE | TRUE  | TRUE   | FALSE 
FALSE | FALSE | FALSE | TRUE  | FALSE   | TRUE 

Неа! Они не то же самое.

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