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?
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 trataNumber.NaN
como não igual aNaN
.
Pelo que entendi, o Object.is
trata Number.NaN
e NaN
como iguais, e -0
e +0
como diferentes.
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 paraNaN
e-0
e+0
de modo que os dois últimos não são referidos como sendo o mesmo, enquantoObject.is(NaN, NaN)
serátrue
. (ComparandoNaN
comNaN
ordinariamente - ou seja, usando tanto iguais duplo ou iguais triplo - avalia comofalse
, 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.