Loading

「思考题」如何比较两个对象是否相等?(不考虑堆栈)

如何比较两个对象是否相等?

在JS中如果是值类型,可以使用 === 号来判断是否相等。而引用类型比较的是他们引用,因此不能直接用 === 来判断,下面介绍几种判断方法。

 const obj = {name: 'xiaoming', age: [18, 24]}
 const obj2 = {name: 'xiaoming', age: [18, 24]}
 console.log('打印', obj === obj2) // false 这里 === 比较的是他们的引用

方法一:JSON.stringify()

将对象用Json.stringify()方法转换成字符串类型,然后用 === 来比较。(这种比较方法不严谨,如果两个对象键值对的顺序不相同则无法直接用这种方式判断)

const obj1 = {name: 'xiaoming', age: [18, 24]}
const obj2 = {name: 'xiaoming', age: [18, 24]}
const obj3 = {age: [18, 24], name: 'xiaoming'}
const res1 = JSON.stringify(obj1)
const res2 = JSON.stringify(obj2)
const res3 = JSON.stringify(obj3)
 console.log('打印', res1 === res2) // true
 console.log('打印', res1 === res3) // false  调换健值对顺序后的比较结果

方法二:需要递归解决循环引用比较麻烦、后续抽时间更新

posted @ 2020-03-18 01:16  fsdffsdf  阅读(283)  评论(0编辑  收藏  举报