发布于 2026-01-06 3 阅读
0

JavaScript 中的对象相等性

JavaScript 中的对象相等性

比较数字或字符串很容易,但你试过比较两个对象吗?🤔

即使两个对象具有相同的键值对,也会返回 false。

例子:

let name = {
    firstName: "suprabha",
    lastName: "supi"
}

let fullName = {
    firstName: "suprabha",
    lastName: "supi"
}

console.log(name === name) // true
console.log(name === fullName) // false
console.log(name == fullName) // false

console.log(Object.is(name, fullName)) // false
console.log(Object.is(name, name)) // true
Enter fullscreen mode Exit fullscreen mode

如上例所示,两者name完全相同fullName。然而,这两个对象与==或都不相等===

在进行对象相等性判断时,可以检查两件事:

1️⃣ 对象具有相同的实例

2️⃣ 对象具有相同的值

1️⃣ 对象具有相同的实例

JavaScript 有两种方法来匹配值。

  • 对于原始类型(字符串、数字),它按值进行比较。
  • 对于非原始类型(对象、数组、日期),它通过引用进行比较。

“通过参考标准进行比较”是什么意思

按引用比较是指对象指向内存中的同一位置。

例子:

let name = {
    firstName: "suprabha",
    lastName: "supi"
}

let fullName = {
    firstName: "suprabha",
    lastName: "supi"
}

let copyName = fullName

console.log(name === fullName) // false
console.log(copyName == fullName) // true
Enter fullscreen mode Exit fullscreen mode

这里,copyName它们fullName指的是同一内存实例,因此返回 true。

2️⃣ 对象具有相同的值

要检查实例,可以使用===相等性判断,但要匹配值,则需要更多步骤😂

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
Enter fullscreen mode Exit fullscreen mode

有一些插件可以帮助您应对上述情况,您可以简单地使用这些插件_.isEqual来检查对象值:

  1. 下划线
  2. 洛达什
  3. isDeepStrictEqual(object1, object2)节点
let name = {
    firstName: "suprabha",
    lastName: "supi"
}

let fullName = {
    firstName: "suprabha",
    lastName: "supi"
}

console.log(_.isEqual(name, fullName)); // true
Enter fullscreen mode Exit fullscreen mode

摘要⅀

在对象中,如果你要检查两个对象的实例,那么你可以使用=====Object.is()

但是,如果您想检查两个对象的值是否相同,则需要自己编写逻辑来实现。


感谢阅读本文❤️

请我喝杯咖啡

🌟推特 📚电子书 🌟 Instagram
文章来源:https://dev.to/suprabhasupi/object-equality-in-javascript-15ff