Подтвердить что ты не робот

Нужен пример, объясняющий, почему использование операндов сравнения!= И == считается плохой практикой в ​​JavaScript

Как я где-то читал, рекомендуется использовать! == и === вместо.

4b9b3361

Ответ 1

"Используйте строгий оператор равенства (===), если вы хотите проверить, что два операнда имеют один и тот же тип и значение. Используйте регулярный оператор равенства (==), если вы заботитесь только о значении и типе не имеет значения. Если, например, один операнд - это номер 5, а другой операнд - строка" 5 ", стандартный оператор равенства вернет true, но, поскольку они не одного типа, вернется оператор строгого равенства ложный." http://www.webreference.com/js/column26/stricteq.html

Ответ 2

Это зависит от того, что вы пытаетесь сделать.

! == и === сравнить как значение, так и тип.

5 == "5"

Вышеуказанное вернет true. Если это не то, что вы намеревались, вы должны сделать это вместо этого:

5 === "5"

Это вернет false.

Ответ 3

=== и! == Операторы.

Почти всегда лучше использовать === и! == операторы. Операторы == и!= Имеют тип принуждения. В в частности, не используйте == для сравнения против ложных значений.

От Условные обозначения Дугласа Крокфорда для языка программирования JavaScript

См. ответ Totty для получения дополнительной информации об этом или прочитайте Дуглас Крокфорд Элементы стиля JavaScript, часть вторая: Идиомы, которая приближается к концепции правдоподобия, ложности и принуждения типа JavaScript более подробно.

Ответ 4

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

Тривиальный пример:

alert ({toString: function() {return "1" } == 1)

Это будет выдавать true - поскольку toString будет вызываться по обоим значениям, тогда результаты строки будут сравниваться. В этом конкретном случае это явно абсурдно, но это может быть проблемой и в более реальных случаях.

Ответ 5

Семантика === и !== почти всегда означает то, что вы имеете в виду. Когда вы сравниваете один примитив с другим, вы хотите проверить, имеют ли они одно значение. Когда вы сравниваете один объект с другим, вы хотите проверить, ссылаются ли они на одну и ту же вещь.

Изменить: Удалена дезинформация о сравнении значений "ложных". Я просто скажу, что оператор == не может отличить null от undefined, или 0 от "", или [0] от 0. Да, я серьезно отношусь к этому последнему.

Ответ 6

Ну, я думаю, что "совет", который вы получили, вероятно, хорошо предназначен, но на самом деле не является полным замечанием.

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

var int = 3;    // Is typeof Number
int = 'haha!';  // is typeof String

Но это не значит, что JavaScript полностью не обращает внимания. Операторы равенства и неравенства (== и! =) Сравнивают оцениваемые значения и игнорируют тип.

Операторы строгого равенства и строгого неравенства (=== и! ==) НЕ заботитесь о типе. Поэтому они будут сравнивать значение типа AND перед определением возвращаемого значения.

Подробнее здесь

http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.5/guide/expr.html#1010037

Ответ 7

Лично, в дополнение к превосходным причинам, о которых говорили другие, мне просто нравится знать, что то, что я сравниваю, именно то, что я намерен. Для меня важна разница между следующим, хотя оба они оценивают до !myVar:

false === myVar
'undefined' === typeof myVar