JavaScript中引用数据类型如何比较是否相等--两个对象相比较属性和值是否相等

js中的对象是引用类型   使用 == / === 已经无法判断两个对象的属性和值是否相等

函数封装

// 对比两个对象的值是否完全相等 返回值 true/false
let  isObjectValueEqual = (a, b)=>{   
  //取对象a和b的属性名
  var aProps = Object.getOwnPropertyNames(a);//返回指定对象所有自身属性名
  var bProps = Object.getOwnPropertyNames(b);
  //判断属性名的length是否一致
  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;
}

 示例演示

var obj1 = {
	name: "dyh",
	sex: "male",
	age: 18,
};

var obj2 = {
	name: "dyh",
	sex: "male",
	age: 18,
};

var obj3 = obj1; //obj1和ob3的指针指向了内存中的同一个地址

console.log(isObjectValueEqual(obj1, obj2)); //true

console.log(obj1 == obj3); // true

console.log(obj1 === obj3); // true

console.log(obj2 == obj3); // false

console.log(obj2 === obj3); // false

 

 

posted @ 2020-07-17 19:23  JackieDYH  阅读(5)  评论(0编辑  收藏  举报  来源