2013-11-19 2 views
-1

Мой код дает мне ошибку с jsHint. Я пытаюсь сделать это:jsHint ошибка, говорящая, что я должен использовать «===»

if (data.result == 't' || task == 'show') { 

Но он говорит мне, что я должен заменить «==» с «===» может кто-нибудь сказать мне, почему это дает это сообщение?

+1

взглянуть на это один http://stackoverflow.com/questions/523643/difference-between-and-in-javascript – Qpirate

ответ

3

=== является оператором строгого равенства.

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

Так что существует опасность, что что-то вроде "" == 0 придаст вам правду, хотя они разных типов.

Поскольку подразумевается неявное преобразование, о котором вы, возможно, и не подозреваете, потому что это происходит автоматически, существует некоторая опасность и вероятность ошибок или ошибок, которые трудно отслеживать.

=== не преобразует операнды, он просто сравнит их.

+0

Но он не пишет '«»== 0 ', так что вы Бесполезный Ответ на вопрос. –

+0

@LightnessRacesinOrbit Я просто привел пример того, что может пойти не так. В любом случае Квентин подвел итог тому, что я хотел сказать. –

1

Преобразование беззвучного типа может быть источником ошибок. Если вы избегаете преобразования между типами данных во время сравнения, вы избегаете многих из этих ошибок.

0

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

Пример, приведенный sdfx here очень полезно в понимании этого:

0==false // true 
0===false // false, because they are of a different type 
1=="1"  // true, auto type coercion 
1==="1" // false, because they are of a different type 

От MDN:

JavaScript имеет как строгие и Type-преобразования (абстрактных) сравнений. Строгое сравнение (например, ===) справедливо только в том случае, если операндами являются того же типа. Наиболее часто используемое абстрактное сравнение (например, ==) преобразует операнды в один и тот же тип перед проведением сравнения. Для реляционных абстрактных сравнений (например, < =) операнды сначала , преобразованные в примитивы, затем тот же тип перед сравнением.

Особенности сравнения:

  • Две строки строго равны, если они имеют ту же последовательность символов, такой же длины, и те же символы в соответствующих
    позиции.
  • Два числа строго равны, если они численно равны (имеют одинаковое значение числа). NaN не равен ни одному, включая NaN. Положительные и отрицательные нули равны одному другому.
  • Два булевых операнда строго равны, если оба истины или оба являются ложными.
  • Два разных объекта никогда не равны ни для строгого, ни для абстрактного сравнения.
  • Выражение, сравнивающее объекты, истинно только в том случае, если операнды ссылаются на один и тот же объект.
  • Null и Undefined Типы == (но не ===).
Смежные вопросы