js里如何比较对象

var x = new Number(500);             
var y = new Number(500);

// (x == y) 为 false,因为对象无法比较

所以如果我有两个对象该怎么比较他们之间是否相等呢

阅读 3.3k
3 个回答

首先先明确 js中对象可以比较 通常指的是比较对象所在的地址是否一致

然后 关于比较 都是要先定义比较的意义 才能比较
例如:
1 数字比较 比较的是大小
2 字符串比较 比较的是每一个字符是否都相等
3 对象比较 比较的是对象的地址是否一致

然后再说关于你写的这个情况
new Number 将数值转换成了Number对象 比较的话比较的是地址
如果你想要比较原始数值的大小 可以使用valueOf方法获取到他的原始值

typeof new Number(10) // 'object'
new Number(10).valueOf() // 10
new Number(10) === new Number(10) // false
new Number(10).valueOf() === new Number(10).valueOf() // true

最简单的方法:

1、JSON.stringify(obj1) === JSON.stringify(obj2)
2、obj1.toString() === obj2.toString()

不同的对象有不同的比较方法,比如题主的用例:

var x = new Number(500);             
var y = new Number(500);
console.log(Number(x) === Number(y));  // true

如果是两个日期对象,可以通过 getTime() 拿到毫秒数来比较,比如

const a = new Date();
const b = new Date();
console.log(a === b); // false
console.log(a.getTime() === b.getTime());  // true
// 注意,按理说 a 和 b 是两个不同的时间,相差可能是毫秒甚至微秒级的
// Date 表示的数据精度和我们比较的精度都是秒,所以 getTime() 的值会相等

如果是 Plain Object,或者 Literal Object 之间进行比较,建议使用 Lodash 提供的 isEquals,这是一个深度比较,全递归遍历所有属性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题