Sé la diferencia entre == y === cuando se aplica a valores primitivos. Pero para los objetos, ambos parecen ser una simple comparación de identidad.

var a = {}
var b = a
var c = {}

a == b // true
a === b // true

a == c // false
a === c // false

¿Hay alguna situación en la que comparar dos objetos proporcionará resultados diferentes para cada operador, o son funcionalmente equivalentes?

0
John Montgomery 7 sep. 2018 a las 22:55

4 respuestas

La mejor respuesta

Sí, comparar dos objetos con == es lo mismo que compararlos con ===. Igual que comparar dos cadenas con == es lo mismo que ===. Si el tipo de valores es el mismo, ambos métodos de comparación darán el mismo resultado. Como indica la especificación :

7.2.14 Comparación de igualdad abstracta

La comparación x == y, donde x e y son valores, produce verdadero o falso. Dicha comparación se realiza de la siguiente manera:

  1. Si el Tipo (x) es el mismo que el Tipo (y), entonces
    • Devuelve el resultado de realizar una estricta comparación de igualdad x === y.
2
Ivar 7 sep. 2018 a las 20:04

Bueno ... === es "comparar identidad y tipo". Usted ha determinado que está comparando dos objetos (por lo que "tipo" es el mismo), eso deja "comparar identidad", que es lo mismo que ==.

Del mismo modo, si compara dos number s, dado que ya sabe que son del mismo tipo (number), === es lo mismo que ==. Aquí no hay nada especial o diferente sobre los objetos frente a los primitivos. Es solo que el único tipo de objetos es object.

-1
Mark Adelsberger 7 sep. 2018 a las 19:58

El extra = in === asegura que ambos lados sean del mismo tipo. a y c son objetos del mismo tipo. Entonces == o === es irrelevante aquí.

1
Shakil Ahmed 7 sep. 2018 a las 20:04

Lo parece

La única forma en que sé "verificar la igualdad de objetos" en javascript es verificar en profundidad todas las claves posibles (pero incluso así es solo verificar el tipo de pato)

1
Naftali aka Neal 7 sep. 2018 a las 19:58