You can’t check object equality directly as strings and numbers do in JavaScript. If two objects have the same properties and all of their properties have the same value, they would be considered equal. Let’s take a look and see what happens.
var obj1= {
occupation: "Bounty Hunter",
genetics: "superb"
};
var obj2= {
occupation: "Bounty Hunter",
genetics: "superb"
};
console.log(obj1 === obj2);// false
Output is false because primitive data types like strings and numbers are compared by their value, while objects like arrays, dates, and plain objects are compared by reference.
JavaScript object equality
A simple example code comparison by reference checks whether the objects given refer to the same location in memory.
<!DOCTYPE html>
<html>
<body>
<script>
var obj1 = {
occupation: "Bounty Hunter",
genetics: "superb"
};
var obj2 = {
occupation: "Bounty Hunter",
genetics: "superb"
};
var obj3 = obj1;
console.log(obj1 === obj2);
console.log(obj1 === obj3);
</script>
</body>
</html>
Output:
Objects have the same value
To check the instance you can use ===
equality, but to match the value you need to work more.
let name = {
firstName: "suprabha",
lastName: "supi"
}let fullName = {
firstName: "suprabha",
lastName: "supi"
}function isEqual(obj1, obj2) {
var props1 = Object.getOwnPropertyNames(obj1);
var props2 = Object.getOwnPropertyNames(obj2); if (props1.length != props2.length) {
return false;
} for (var i = 0; i < props1.length; i++) {
let val1 = obj1[props1[i]];
let val2 = obj2[props1[i]];
let isObjects = isObject(val1) && isObject(val2); if (isObjects && !isEqual(val1, val2) || !isObjects && val1 !== val2) {
return false;
}
}
return true;
}function isObject(object) {
return object != null && typeof object === 'object';
}console.log(isEqual(name, fullName)); // true
You can also use the Lodash library for an easy approach: https://lodash.com/docs/4.17.15#isEqual
Reference Equality:
- Objects are equal if they reference the same location in memory.
Same Object:
- Two variables referencing the same object are considered equal.
Deep Equality:
- A custom function or library is needed to check if two objects have the same properties and values.
Using Lodash:
- Utilizes
_.isEqual
method from Lodash for deep equality checks.
Shallow Equality:
- Compares only the top-level properties of objects.
Do comment if you have any doubts or suggestions on this JS equality topic.
Note: The All JS Examples codes are tested on the Firefox browser and the Chrome browser.
OS: Windows 10
Code: HTML 5 Version