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-0e+0como iguais e trataNumber.NaNcomo 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.isirá se comportar da mesma forma que três iguais, mas com tratamento especial paraNaNe-0e+0de modo que os dois últimos não são referidos como sendo o mesmo, enquantoObject.is(NaN, NaN)serátrue. (ComparandoNaNcomNaNordinariamente - 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.