📌  相关文章
📜  两个 JavaScript 对象的相等性(1)

📅  最后修改于: 2023-12-03 15:06:13.986000             🧑  作者: Mango

两个 JavaScript 对象的相等性

在 JavaScript 中,使用 == 操作符对两个对象进行比较时并不能得到预期结果,因为它判断的是对象的引用是否相等,而不是对象的值是否相等。

因此,在判断两个 JavaScript 对象是否相等时,应该使用 === 操作符或其他特定于对象类型的方法。

判断普通对象是否相等

使用 === 操作符判断两个普通对象是否相等时,要求它们的属性名和属性值都相等,才认为它们相等。

const obj1 = {
  a: 1,
  b: '2'
};

const obj2 = {
  a: 1,
  b: '2'
};

console.log(obj1 === obj2); // false
console.log(obj1.a === obj2.a && obj1.b === obj2.b); // true

注意,如果对象的属性值是一个引用类型,那么它们的比较同样是比较引用地址,而不是值。

判断数组对象是否相等

对于数组对象,可以使用 JSON.stringify() 将其转为字符串,再进行比较,但需要注意数组对象的属性和值的顺序。

const arr1 = ['a', 'b', 'c'];

const arr2 = ['a', 'b', 'c'];

console.log(JSON.stringify(arr1) === JSON.stringify(arr2)); // true
判断函数对象是否相等

对于函数对象,可以直接使用 === 操作符进行比较,因为函数对象没有属性。

function foo() {}

const bar = foo;

console.log(foo === bar); // true
判断日期对象是否相等

对于日期对象,可以使用其方法 getTime() 将其转为时间戳,再进行比较。

const date1 = new Date('2020-01-01');

const date2 = new Date('2020-01-01');

console.log(date1.getTime() === date2.getTime()); // true
总结

需要注意的是,在比较对象时,应该对每种对象类型进行单独考虑,并根据对象的特性选择相应的比较方法,避免使用 == 操作符和不合适的比较方法,导致错误的结果。