Diferença entre object.is() e ===

Qual seria a diferença do construtor

object.is()

para o operador

===

Sendo que ambos comparam se dois valores são o mesmo, a diferença seria só o tipo de descrição ao retornar?

Pela documentação da MDN, existe uma diferença:

Isso (Object.is()) também não é o mesmo que ser igual de acordo com o operador === . O operador === (assim como o operador == ) trata os valores numéricos -0 e +0 como iguais e trata Number.NaN como não igual a NaN .

Pelo que entendi, o Object.is trata Number.NaN e NaN como iguais, e -0 e +0 como diferentes.

FONTE: Object.is() - Javascript | MDN

A sim, então um seria inverso ao outro.

Object.is e === são iguais, porém, com diferença nos casos:

  • Number.NaN com NaN (=== trata como objetos diferentes) e
  • -0 com +0 (Object.is considera valores diferentes).

Veja:

Em resumo, dois iguais irá realizar uma conversão de tipo ao comparar duas coisas; três iguais irá fazer a mesma comparação, sem conversão de tipo (simplesmente retornando false se os tipos forem diferentes); e Object.is irá se comportar da mesma forma que três iguais, mas com tratamento especial para NaN e -0 e +0 de modo que os dois últimos não são referidos como sendo o mesmo, enquanto Object.is(NaN, NaN) será true . (Comparando NaN com NaN ordinariamente - ou seja, usando tanto iguais duplo ou iguais triplo - avalia como false , porque IEEE 754 diz isso.) Note que a distinção entre todos eles têm a ver com seu manuseio dos primitivos; nenhum deles compara se os parâmetros são conceitualmente semelhante em estrutura. Para qualquer objetos não-primitivo x e y que têm a mesma estrutura, mas são objetos distintos entre si, todas as formas acima será avaliada como falsa.

Fonte: Comparações de igualdade e uniformidade

1 curtida