Возможный дубликат:
Javascript === vs ==: Имеет ли значение, какой оператор "равный" я использую?
В чем разница между ==
и ===
в JavaScript? Я также видел операторы !=
и !==
. Есть ли еще такие операторы?
===
и !==
являются строгими операторами сравнения:
JavaScript имеет как строгое, так и типовое преобразование равенства. Для
strict
равенства сравниваемые объекты должны иметь один и тот же тип и:
- Две строки строго равны, если они имеют одну и ту же последовательность символов, одну и ту же длину и одинаковые символы в соответствующих позициях.
- Два числа строго равны, если они численно равны (имеют одинаковое числовое значение).
NaN
не равно никому, включаяNaN
. Положительные и отрицательные нули равны друг другу.- Два булевых операнда строго равны, если оба они истинны или оба ложны.
- Два объекта строго равны, если они относятся к одному и тому же
Object
.Null
иUndefined
типы==
(но не===
). [Ie (Null==Undefined
)true
но (Null===Undefined
)false
]
if (input == null) ...
, будет ли оно также выполнено условие, когда input не определен?
new String()===new String()
возвращает false (различные ссылки на объекты). Но new String
следует избегать в любом случае.
Посмотрите здесь: http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html
3 равных знака означают "равенство без принуждения типа". Используя тройное равенство, значения также должны быть равны по типу.
0 == false // true
0 === false // false, because they are of a different type
1 == "1" // true, automatic type conversion for value only
1 === "1" // false, because they are of a different type
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
==
is===
с преобразованием типов (он же принуждение). Чтобы действительно понять, что я имею в виду, вы можете посмотреть на эту функцию JavaScript, которая ведет себя точно так же, как==
: stackoverflow.com/a/38856418/984780