js浅比较实现
浅比较的实现方法
在JavaScript中,浅比较(shallow comparison)通常指比较两个对象的引用或基本类型的值是否相等,而不深入比较嵌套对象的属性。以下是几种常见的浅比较实现方式:
使用 === 运算符
对于基本类型(如数字、字符串、布尔值),直接使用严格相等运算符 === 进行比较即可:
const a = 1;
const b = 1;
console.log(a === b); // true
对于引用类型(如对象、数组),=== 会比较引用地址是否相同:
const obj1 = { key: 'value' };
const obj2 = { key: 'value' };
console.log(obj1 === obj2); // false(不同引用)
浅比较对象的属性
若需要比较两个对象的顶层属性是否相同(不递归比较嵌套对象),可以手动实现:
function shallowEqual(obj1, obj2) {
if (obj1 === obj2) return true;
if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || !obj1 || !obj2) {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) return false;
for (const key of keys1) {
if (obj1[key] !== obj2[key]) return false;
}
return true;
}
使用第三方库
一些库(如 React 的 shallowEqual 或 Lodash 的 _.isEqual)提供了浅比较工具:
import { shallowEqual } from 'react-redux';
const result = shallowEqual({ a: 1 }, { a: 1 }); // true
数组的浅比较
对于数组,可以比较长度和每个元素是否严格相等:

function shallowCompareArrays(arr1, arr2) {
if (arr1.length !== arr2.length) return false;
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) return false;
}
return true;
}
注意事项
- 浅比较不适用于嵌套对象或数组的深度比较。
- 对于函数类型的属性,比较的是引用而非函数内容。
- 性能上,浅比较比深比较更快,但可能遗漏深层差异。






