Лживый оператор ===
почему оператор идентичности иногда дает совсем не тот результат, который все ожидают
Это забавно и, возможно, удивительно, но существует ряд случаев, в которых оператор идентичности ===
возвращает совсем не то значение, которое все ожидают.
Пример №1
0 === -0
// true
При сравнении, в примере приведенном выше, оператор идентичности не учитывает вероятность существования отрицательного и положительного нуля.
Как избежать?
Воспользуйтесь методом Object.is():
Object.is(0, -0)
// false
Пример №2
NaN === NaN
// false
Так происходит, потому что согласно спецификации IEEE 754, любой оператор со значением NaN должен возвращать ложное значение (false) или приводить к ошибке.
Как избежать?
Для таких случае в JavaScript существует функция isNaN():
Number.isNaN(NaN)
// true
Пример №3
И наконец:
0.1 + 0.2 === 0.3
//false
В основе лежат некоторые особенности использования операций с плавающей точкой в JavaScript:
console.log(0.1 + 0.2);
// 0.30000000000000004
Спасибо за внимание.