Начиная с нескольких месяцев, моя 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
Это действительно путь. или я должен игнорировать/отключать эти предупреждения?
Я бы сказал, что любая форма тикового принуждения, если она неожиданна для типов, которые не могут быть известны во время выполнения (например, любой динамический язык), является плохой практикой.
Например, они оба правдивы:
"0" == false
"0"
Хотя это ложно:
false
===
предсказуемого результата больше, чем ==
? Если вы находитесь в полной темноте, вам все равно придется выполнить некоторую проверку типов перед вычислением равенства.
Да, это была лучшая практика в течение почти двух десятилетий.
Предупреждение довольно ясно (даже объясняя, почему оно на месте), и вы найдете тот же совет в своих JavaScript-книгах, а также широко в Интернете.
Поэтому я не могу понять, почему вы считаете, что игнорируете или даже отключите его.
Вы можете найти дополнительную информацию о том, когда выбрать ==
и когда выбрать ===
здесь:
==
эквивалентно ===
когда значения одного типа.
===
помогает всем в долгосрочной перспективе и стоит дополнительного нажатия клавиши.
==
подходит только дляif(x==null)
так как он тоже попадает вundefined