Операторы проверки на равенства
==
Оператор ==
проверяет равенство двух значений, при этом приводя к одному типу Number.
'0' == 0 // true
'' == 0 // true
'1' == 1 //true
//нужно запомнить что null и undefined равны между собой, и не равны ни кому другому
false == 0 //true
true == 1 //true
для примведения к числу - сначало используется метод valueOf() если его нет или он вернул не примитив, используется метод toString()
===
Оператор ===
проверяет равенство значений без приведения
'0' === 0 //false
'1' === 1 //false
[] === [] //false
{} === {} //false
Object.is(val1, val2)
Object.is()
- это метод добавленный в ES6. Он проверяет являются ли два значения одинаковыми. Два значения являются одинаковыми если :
- оба равны
undefined
- оба равны
null
- оба
true
, иои обаfalse
- две строки равны, если имеют одинаковую длину и одинаковые символы
два числа равны, если:
- оба 0
- оба -0
- оба NaN
- либо оба не равны нулю или NaN и оба имеют одинаковыет значения
оба являются одиним и тем же объектом
Object.is
отличается от ==
тем что оператор ==
сначало приводит оба значения к одному типу. В результате '' == false
- вернет true
, или '0' == 0
и '' == 0
в обоих случаях вернет true
. Object.is - не приводит значения к одному виду.
Так же Object.is
не тоже самое что и ===
. Т.к например +0
и -0
равны, а NaN
между собой неравны.
Object.is(NaN, NaN) // true
Object.is([], []) //false
Object.is('0', 0) //false
Object.is(null, undefined) //fasle