Object: is, comparar
El método Object.is(obj1, obje2) permite comparar si dos objetos, pasados como argumetnos, son el mismo valor.
Para objetos primitivos como numbers, strings y booleans que sean el mismo valor significa que sean iguales en todo: valor y tipo.
var nombre_1 = "Pedro";
var nombre_2 = "Juan";
var edad1 = 12;
var edad2 = "12";
console.log("Nombres iguales? "+ Object.is(nombre_1, nombre_2) )
console.log("Edades iguales? "+ Object.is(edad1, edad2) )
Como era de esperar todas las comparaciones resultan en el valor false. No son iguales en valor, aunque lo sean en tipo. Realmente estas comparaciones podemos hacerlas con los operadores de comparación == o identidad ===
Para los restantes objetos esta igualdad significa que ambos señalan a la misma posición de memoria. Recuerda que los objetos son referencias a las posiciones de memoria donde se almacenan los datos.
var lista1 = [2,4,6,8,10];
var lista2 = [2,4,6,8,10];
console.log("Listas iguales? "+ Object.is(lista1, lista2) )
Según parece ambas listas son iguales, pues no, están almacenadas en diferentes posiciones de memoria, por tanto Object.is() devuelve falso, nos dice que lista1 y lista2 son objetos diferentes, aunque ambos guarden los mismos datos.
var Flor = function(n,c){
this.nombre = n;
this.color = c;
}
Flor.prototype.cartel = function(){
return this.nombre+", "+this.color
}
var rosa = new Flor("rosa","roja");
var margarita = new Flor("margarita", "blanca");
Object.is(rosa.cartel, margarita.cartel)
En este ejemplo ves como el resutlado es true porque ambos objetos comparten el mismo método. Por tanto rosa.cartel y margarita.cartel son el mismo valor, se ha heredado a través de la propiedad prototype y están en la misma dirección de memoria.
var Flor = function(n,c){
this.nombre = n;
this.color = c;
this.cartel = function(){
return this.nombre+", "+this.color
}
}
var rosa = new Flor("rosa","roja");
var margarita = new Flor("margarita", "blanca");
console.log(Object.is(rosa.cartel, margarita.cartel))
Observa como ahora el resutlado es false, en este caso el método cartel() no es compartido, cada objeto rosa y margarita posee una copia de ese método. Y cada copia se guarda en una posición diferente.
Este método es la tercera forma de comparar que proporciona Javascript y es similar,pero no exactamente igual, a los operadores de comparación == o ===.
Al comparar con el operador == Javascript hace una conversión interna de datos si es necesario, mientras que Object.is() no lo hace, comprueba la igualdad contemplando también en la comparación el tipo de datos.
Se parece más a la identidad ===. La diferencia entre ambos está en que para este método +0 y - 0 son distintos, así como NaN y Number.NaN.
Este método se ajusta muy bien a comparaciones en contextos matemáticos, donde es fácil que puedan obtenerse resultados con +9 y -0 (operaciones trigonométricas fundamentalmente) o donde deba cuidarse la comparación con NaN.