JS中两个对象相等意味着引用指向同一块内存区域

let location1 = {province: '湖北', city: '武汉', country: '武昌'};

let location2 = {province: '湖北', city: '武汉', country: '武昌'};

console.log(location1 === location2);

let location3 = {province: '江苏', city: '南京', country: '中山'};

let location4 = location3;

console.log(location3 === location4);

location1 等于 location2的意思是location1 指向的内存和location2 指向的内存是同一块内存区域。

如果location1 和 location2虽然存储的值相等,但是如果属于不同的内存区域,那么两者仍然不相等。

 

在JavaScript中,比较两个普通对象相等性并不是直接使用`==`或`===`运算符,因为这两个运算符比较的是对象引用,而不是对象的内容。如果两个对象引用的是不的内存地址,即使它们的内容相,比较结果也会是`false`。 要比较两个普通对象的内容是否相等,可以使用以下几种方法: 1. **手动比较**:逐个属性进行比较。 2. **使用`JSON.stringify`**:将对象转换为JSON字符串后进行比较。 3. **使用第三方库**:如Lodash的`isEqual`方法。 ### 方法1:手动比较 ```javascript function isEqual(obj1, obj2) { const keys1 = Object.keys(obj1); const keys2 = Object.keys(obj2); if (keys1.length !== keys2.length) { return false; } for (let key of keys1) { if (obj1[key] !== obj2[key]) { return false; } } return true; } const obj1 = { a: 1, b: 2 }; const obj2 = { a: 1, b: 2 }; const obj3 = { a: 1, b: 3 }; console.log(isEqual(obj1, obj2)); // true console.log(isEqual(obj1, obj3)); // false ``` ### 方法2:使用`JSON.stringify` ```javascript function isEqual(obj1, obj2) { return JSON.stringify(obj1) === JSON.stringify(obj2); } const obj1 = { a: 1, b: 2 }; const obj2 = { a: 1, b: 2 }; const obj3 = { a: 1, b: 3 }; console.log(isEqual(obj1, obj2)); // true console.log(isEqual(obj1, obj3)); // false ``` 注意:这种方法有局限性,因为它依赖于属性的顺序。如果对象的属性顺序不,即使内容相,比较结果也会是`false`。 ### 方法3:使用第三方库(如Lodash) ```javascript const _ = require('lodash'); const obj1 = { a: 1, b: 2 }; const obj2 = { a: 1, b: 2 }; const obj3 = { a: 1, b: 3 }; console.log(_.isEqual(obj1, obj2)); // true console.log(_.isEqual(obj1, obj3)); // false ``` 使用第三方库的方法更为可靠,因为它处理了各种复杂的情况,如嵌套对象、数组等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值