0.明确两点
1.当两个引用指向同一个对象时,对象才是相等的;
1. var obj1 = {a:1} 2. var obj2 = obj1
2.obj1 == obj2 结果为false
1. var obj1 = {a:1} 2. var obj2 = {a:1}
1.判断两个对象相等
(1)把两个对象转译成字符串进行对比
JSON.stringify(object1) === JSON.stringify(object2);
这个方法只适用于完全相同的,即键-值顺序都完全对应的对象
(2)Object.keys()
// 列出所有的键,接着遍历数组 function ifCompare(object1, object2) { var o1keys = Object.keys(object1); var o2keys = Object.keys(object2); if (o2keys.length !== o1keys.length) return false; for (let i = 0; i <= o1keys.length - 1; i++) { let key = o1keys[i]; if (!o2keys.includes(key)) return false; if (object2[key] !== object1[key]) return false; } return true; }
(3)ES6
Object.entries(object1).toString() === Object.entries(object2).toString();
(4)lodash 的 isEqual 函数
_.isEqual(value, other)
value
(*): 用来比较的值。other
(*): 另一个用来比较的值。- (boolean): 如果 两个值完全相同,那么返回
true
,否则返回false
。
var object = { 'a': 1 }; var other = { 'a': 1 }; _.isEqual(object, other); // => true object === other; // => false
2.判断数组是否相等
(1)lodash 的 isEqual 函数
(2)使用toString()方法
(3)借助JSON的stringify()方法
(注:如果要比较元素是否相同,但元素位置打乱的话,先用sort()排序再比较)