A-A+

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

2018年12月12日 javascript, 前端基础 暂无评论

基础知识: JavaScript有两种不同的方法来测试相等性。字符串和数字等基本类型按其值进行比较,而数组,日期和用户定义的对象等对象则通过引用进行比较。这意味着它会比较两个对象是否指向内存中的相同位置。
答案:等式检查将检查两个对象是否具有相同属性的相同值。要检查这一点,您可以获取两个对象的键。如果属性数不匹配,则这两个对象不相等。其次,将检查每个属性是否具有相同的值。如果所有属性具有相同的值,则它们是相等的。

function isEqual(a, b) {
var aProps = Object.getOwnPropertyNames(a),
bProps = Object.getOwnPropertyNames(b);
if (aProps.length != bProps.length) {
return false;
}
for (var i = 0; i < aProps.length; i++) {
var propName = aProps[i];
if (a[propName] !== b[propName]) {
return false;
}
}
return true;
}

局限性:

  • 如果其中一个属性值本身就是一个对象,将无法比较;
  • 如果其中一个属性值是NaN(JavaScript中唯一不等于它的值?)
  • 如果一个对象具有值未定义的属性,而另一个对象没有该属性(因此评估为未定义)。顺便说一句,你可以使用hasOwnProperty来解决这个问题
标签:

给我留言

Copyright © 前端面试题 保留所有权利.   Theme  Ality 桂ICP备17012235号-1

用户登录