Cuando utilizamos los operadores de comparación estrictos === para hacer la comparación de si existe igualdad entre objetos o arrays nos damos cuenta que los objetos tanto como arrays y dates son comparados por su referencia, es decir, básicamente se checa si los objetos dados por referencia tienen la misma ubicación en memoria. Si un objeto y otro tiene la misma ubicación en memoria entonces la consola nos arrojara TRUE, de lo contrario nos arrojara FALSE.

 

Ejemplo:

// Objects like arrays, dates, and plain objects are compared by their reference.
// Basically checks to see if the objects given refer to the same location in memory. 
 
var object1 = {
	name: 'cristina',
	lastname: 'Rojas'
}
 
var object2 = {
	name: 'cristina',
	lastname: 'Rojas'
}
 
var callObject1 = object1;
 
// Output: FALSE - distinct instances
console.log(object1 === object2);
 
// Output: TRUE -  refer to the same instance.
console.log(callObject1 === object1);
 

Y si queremos comparar que dos objetos sean iguales en valor podemos hacer un código más profundo, por ejemplo:

// Check if the objects have the same numbers of properties.
// Check if the objects have the same values.
var object1 = {
	name: 'cristina',
	lastname: 'rojas'
} 
 
var object2 = {
	name: 'cristina',
	lastname: 'rojas'
}
 
function checkObjectValues(a, b){
	// Obtainging all the objects properties.
	var aProperties = Object.getOwnPropertyNames(a); 
	var bProperties = Object.getOwnPropertyNames(b); 
 
	console.log(aProperties.length); // 2 properties
	console.log(bProperties.length); // 1 propertie
 
	// If the number of properties are diferents then the objects are no equals.
	if (aProperties.length != bProperties.length) {
		return false;
	} 
 
	// If the objects have same numbers of properties 
	// We need to check if the properties values are the same
	for (var i = 0; i < aProperties.length; i++) {
		var saveNameProperty = aProperties[i]; // The name of the property name, lastname.
 
		if ( a[saveNameProperty] !== b[saveNameProperty]) { // The value of the property cristina, rojas.
			return false;
		}
	}
 
	return true;
}
 
checkObjectValues(object1, object2);
 

@telecristy.

¿Te gustó esta publicación? Márcala como favorita