2015-11-17 6 views
4

Я слышал о булевой арифметике и думал попробовать попробовать.Javascript Simple Boolean Arithemetic

alert (true+true===2) //true 
alert (true-true===0) //true 

Так алгебра говорит мне верно = 1

alert (true===1) //false :O 

Может кто-нибудь объяснить, почему это происходит?

+1

Возможный дубликат [Что конкретно означает «===» в javascript?] (Http://stackoverflow.com/questions/1029781/what-is-exactly-the-meaning-of-in-javascript) – mpromonet

ответ

4

=== является оператором строгого равенства. Попробуйте вместо этого ==. true==1 будет оцениваться до true.

оператор строгого равенства === рассматривает только значения равны, если они имеют одинаковый тип. Оператор равного равенства == пытается до преобразовывать значения разных типов, прежде чем сравнивать их как строгое .

Случай 1:

В случае true===1, тип данных является истинным логическое значение, тогда как тип 1 это число. Таким образом, выражение true===1 будет оцениваться до false.

Случай 2:

В случае true+true===2 и true-true===0 арифметической операции выполняются первым (Так как + оператор имеет приоритет над ===See Operator Precedence.), А затем результат сравниваются с другим операндом.

При оценке выражения (true+true===2) арифметическая операция true+true выполнена с первым результатом 2. Затем результат суммируется с другим операндом. то есть (2==2) будет оцениваться до true.

+0

@SOReadytoHelp Отредактировал свой ответ. Взгляни. – Vivek

1

Поскольку сравнение данных TYPE и value (это то, что делает оператор '==='), TRUE не совсем то же самое, что и 1. Если вы изменили это на TRUE == 1, он должен работать нормально.

1

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

enter image description here

Вот почему истинные + правда равен 2

в вас r третье выражение, которое вы используете === это не конвертирует аргументы, просто проверяйте равенство с типом, , чтобы сделать его истинным оба значения, и там тип должен быть таким же.

Это все

+0

Если вы прочитали вопрос, я не использовал == вообще –

+0

извините за то, что я редактировал свой ответ в то время, true + true - это выражение, у меня есть прикрепленное изображение, чтобы объяснить, как логические значения преобразуются во время выражения, есть ли у вас понял, как он работает? –

1

В начале, вы делаете BOOL + BOOL.Оператор + имеет приоритет над оператором ===, поэтому он сначала оценивается. В этой оценке он преобразует булевы в их числовые формы. Запустите console.log(true + true);, и это вернет 2. Поскольку вы сравниваете число 2 с номером 2, вы получаете возвращаемое значение true со строгим равенством.

Когда вы просто сравниваете true === 1, как и все остальные, вы сравниваете логическое значение true с номером 1, который не является строго равным.