dr.Brain

doctor Brain

мир глазами веб-разработчика

Лживый оператор ===

почему оператор идентичности иногда дает совсем не тот результат, который все ожидают

dr.Brain

время чтения 1 мин.

Photo by Mathew Schwartz on Unsplash

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

Пример №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

Спасибо за внимание.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.