在JavaScript中,对象(如{a:1})是通过引用进行比较的,而不是通过它们的值。因此,即使两个对象具有相同的键和值,但它们是不同的对象实例,所以{a:1} == {a:1}会出错。
当将对象用括号括起来时,实际上是将其转换为字符串或数字进行比较。在这种情况下,({a:1})== {a:1}会有效,因为它实际上是在比较"object Object"字符串。但是,这种方法并不可靠,因为它依赖于对象转换为字符串的方式,可能会导致意外的结果。
为了正确比较两个对象是否具有相同的键和值,可以使用以下方法:
function objectsAreEqual(obj1, obj2) {
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (const key of keys1) {
if (!obj2.hasOwnProperty(key) || obj1[key] !== obj2[key]) {
return false;
}
}
return true;
}
const obj1 = {a: 1};
const obj2 = {a: 1};
console.log(objectsAreEqual(obj1, obj2)); // 输出:true
这个函数会逐个比较两个对象的键和值,确保它们完全相同。
领取专属 10元无门槛券
手把手带您无忧上云