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)
```