龙猫不热

导航

Object.keys与Object.hasOwnProperty的使用

1. Object.hasOwnProperty()的使用

  • hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性 (忽略原型链) 中是否具有指定的属性
  • 语法: obj.hasOwnProperty(prop)
  • 参数prop: 要检测的属性的 String 字符串形式表示的名称,或者 Symbol
  • 返回值: 用来判断某个对象是否含有指定的属性的布尔值 Boolean

**注意**:即使属性的值是 null 或 undefined,只要属性存在,hasOwnProperty 依旧会返回 true。

	
	let o = new Object();
	o.propOne = null;
	o.hasOwnProperty('propOne'); // 返回 true
	o.propTwo = undefined;
	o.hasOwnProperty('propTwo'); // 返回 true

示例
使用 hasOwnProperty 方法判断属性是否存在

	// 判断 o 对象中是否存在 prop 属性
	o = new Object();
	o.hasOwnProperty('prop'); // 返回 false
	o.prop = 'exists';
	o.hasOwnProperty('prop'); // 返回 true
	delete o.prop;
	o.hasOwnProperty('prop'); // 返回 false

hasOwnProperty 方法对待自身属性和继承属性的区别:

	o = new Object();
	o.prop = 'exists';
	o.hasOwnProperty('prop');             // 返回 true
	o.hasOwnProperty('toString');         // 返回 false
	o.hasOwnProperty('hasOwnProperty');   // 返回 false

/*
给一个数组numberArr
	编写代码: 计算numberArr中相同数字的次数, 并把相容数组去掉 (使得剩下的数字都唯一)

	然后按照次数的大小打印出剩下的所有数字以及数字的相同次数 (一次打印一个数字和其次数)

	例如: 
		12345679  10 (数字 数字相同次数)
*/

let numberArr = [
		1,1,1,
		2,2,2,2,2,2,2,2,2,2,
		10,10,10,10,10,10,
		1,1,1,1,1,1,1,1,
		5,5,5,5,5,5,5,
		0,0,0,0,0,0,0,0,
		6,6,6,6,6,6,6,6,6,
		0,0,
		8,8,8,8,8,8,8,8,8,8,
		4,4,4,4,4,4,4,4,
		3,3,3,3,3,3
];

let newObj = {}

// forEach 遍历数组中每一位数值
numberArr.forEach(item=>{
	// 使用 hasOwnProperty 判断 newObj 对象中是否有 item 这个属性
	if(newObj.hasOwnProperty(item)){
		// 如果有, 让 item 属性的 value 自增一
		newObj[item]++
        // console.log(newObj[item])
	}else{
		// 如果没有, 让 item属性的 value = 1, 下次循环时就会走 true 部分, 将item对应的属性自增一
		newObj[item] = 1
	}
})
console.log(newObj)

2.Object.keys()的使用

  • Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致
  • 语法: Object.keys(obj)
  • 参数obj: 要枚举的对象
  • 返回值: 一个表示给定对象的所有可枚举属性的字符串数组。
// 简单的数组
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// 类似数组的对象
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

// 类似数组的对象, 但key是随机的
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

// getFoo 为非枚举的属性
var myObj = Object.create({}, {
  getFoo: {
    value: function () { return this.foo; }
  }
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // console: ['foo']

/*
	给出两个对象 a,b
	编写代码: 比较两个对象中的主键, 若b中的主键与a中的主键相同, 则把a中的相同主键删除
*/

let a = {
	"0x91232312":"a",
	"0x98232312":"b",
	"0x912323212":"c",
	"0x915232312":"d",
	"0x912262312":"e"
}

let  b= {
	"0x1":"xxxx",
	"0x912323212":"xxsaasdfxx",
	"0x2":"xxxx",
	"0x3":"xxxx",
	"0x912262312":"xzcv"
}

Object.keys(b).forEach(item=>{
	if(a.hasOwnProperty(item)){
		delete a[item]
	}
})
console.log(a)



```

posted on 2021-09-07 15:31  龙猫不热  阅读(468)  评论(0编辑  收藏  举报