== и! = Стало плохой практикой?

1

Начиная с нескольких месяцев, моя IDE (WebStorm) выделяет JavaScript регулярных операторов равенства со следующим предупреждением:

Comparioson a == b may cause unexpected type coercion.
This inspection reports usages of JavaScript quality operators which may cause unexpected
type coercions. It is considered a good practice to use the type-safe equality operators
=== and !== instead of their regular counterparts == and !=.

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

if(parseInt(val) == val) // val can be safely converted to int

Тем не менее, среда IDE добавляет предупреждения ко всем вхождениям ==, поэтому приведенное выше не кажется правильным. Я могу преобразовать все эти части во что-то гораздо менее читаемое:

if(parseInt(val).toString() === val) // be happy webstorm

Это действительно путь. или я должен игнорировать/отключать эти предупреждения?

  • 1
    == подходит только для if(x==null) так как он тоже попадает в undefined
  • 1
    т.е. не "хорошо" на самом деле
Показать ещё 10 комментариев
Теги:
type-conversion
operators
warnings
equality

2 ответа

2
Лучший ответ

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

Например, они оба правдивы:

 "0" == false
 "0"

Хотя это ложно:

 false
  • 1
    Если вы пытаетесь сравнить два значения, и у вас нет абсолютно никакого представления о каком-либо из этих типов, как вы узнаете, достигнет ли === предсказуемого результата больше, чем == ? Если вы находитесь в полной темноте, вам все равно придется выполнить некоторую проверку типов перед вычислением равенства.
  • 1
    @robg Потому что явное всегда лучше, чем неявное. Если вы не знаете, что он мог передать, как, например, в сериализованном виде, вы можете явно проверить несколько случаев и выдать ошибку или иметь обработчик по умолчанию для остальных случаев. Это также спасает вас от случаев, когда вы изначально проектировали функцию для одного использования, а затем расширяете ее для нового использования и получаете неожиданные результаты из-за неявного поведения.
Показать ещё 1 комментарий
3

Да, это была лучшая практика в течение почти двух десятилетий.

Предупреждение довольно ясно (даже объясняя, почему оно на месте), и вы найдете тот же совет в своих JavaScript-книгах, а также широко в Интернете.

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


Вы можете найти дополнительную информацию о том, когда выбрать == и когда выбрать === здесь:

  • 0
    Вы подразумеваете, что неявное приведение типов - это плохо. Если ваше приложение достаточно неоднозначно, и вы не уверены, какие типы / значения вы собираетесь сравнивать, я думаю, у вашего кода есть большие проблемы. == эквивалентно === когда значения одного типа.
  • 0
    @mhodges А как насчет того, чтобы люди, злоупотребляющие вашей библиотекой, или новые разработчики, приходящие на проект, передавали неверные значения и получали странные результаты? Использование === помогает всем в долгосрочной перспективе и стоит дополнительного нажатия клавиши.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню