1、JSON.stringify(obj)
这种方法,简单一行代码就搞定。
但有一个缺点:当对象里key值的顺序不一致时,比较就会出问题了。并且在JSON.stringify()时,一些特殊类型的值,比如undefined
,Date
,RegExp
等会丢失或者变形。
var obj1={
name:111,
age:222,
dis:[1,2,3,4],
info:{
like:"hx",
arr:[1,2,3,4]
}
}
var obj2={
name:111,
age:222,
dis:[1,2,3,4],
info:{
like:"hx",
arr:[1,2,3,4]
}
}
console.log(JSON.stringify(obj1)==JSON.stringify(obj2));
2、递归
使用递归来判断两个对象是否相等。现有对象
obj1
和obj2
对象里,值的类型包括undefined
、null
、number
、string
、boolean
、Date
、Array
和对象。数组项也有可能是简单类型、数组甚至对象 。
默认输入的两个参数是对象了,就不做判断了。。。。。。。。
2.1、实现思路
- 先判断两个对象的key值的长度。若长度不相等,则
return false
- 遍历对象
obj1
,检查对象obj2
中是否有对应的key值, 没有,则return false
- 比较两个对象中这个key对应的值的类型是否相等,不相等,则
return false
- 如果值的类型是
undefined
、number
、string
、boolean
的一种,直接两个值比较,不同,则return false
- 如果值是
null
,那么 比较两个值是否相等。不等,则return false
- 如果值是
Date
类型的, - 如果值是对象,调用自身
- 如果值是数组,因为数组项可能是任意一种数据类型的,所以还是先比较长度,长度相等后再逐一比较数组的每一项。
2.2、代码部分
var obj1 = {
name: 111,
age: 222,
arr: [1, 2, 3, 4],
info: {
name: "iii",
arr: [1, 2, 3, [1, 2], {
name: 222 }]
}
}
var obj2 = {
name: 111,
arr: [1, 2, 3, 4],
age: 222,
info: {
name: "iii",
arr: [1, 2, 3, [1, 2], {
name: 222 }]
}
}
// 假设对象内值的类型有:undefined、null、string、boolean、number、对象、数组和Date
function