📅  最后修改于: 2023-12-03 15:06:13.986000             🧑  作者: Mango
在 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
需要注意的是,在比较对象时,应该对每种对象类型进行单独考虑,并根据对象的特性选择相应的比较方法,避免使用 ==
操作符和不合适的比较方法,导致错误的结果。