Операторы проверки на равенства

==

Оператор == проверяет равенство двух значений, при этом приводя к одному типу 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

results matching ""

    No results matching ""