引言
对象在我们开发中使用的非常多,在使用场景中,我们也会遇到很多需要判断对象中是否存在某个属性的情况,判断方法当然比较多,就看当前的场景适用哪种方法,下面是分享的几种方法
(key为需要判断的属性,obj为当前对象)
1.判断obj.key是否等于undefined
let obj = {
a: "a",
b: function () {
console.log("b");
}
}
console.log(obj.c);//输出undefined
但是这样写有个弊端,就是如果obj中存在这个变量,但是变量的值就是undefined,就无法准确判断了
let obj = {
a: "a",
b: function () {
console.log("b");
},
c: undefined
}
console.log(obj.c);//同样输出undefined
2.判断key是否在Object.keys(obj)的数组中
Object.keys() 返回一个数组,其元素是字符串,对应于直接在对象上找到的可枚举的字符串键属性名。
let obj = {
a: "a",
b: function () {
console.log("b");
},
}
console.log(Object.keys(obj).includes('c'));//输出false
这里需要注意一点,通过 Object.keys() 返回的数组,是当前对象上可枚举的属性值
那么什么叫做可枚举?
我们可以通过Object.defineProperty给对象添加属性,添加属性时,可以选择参数
第一个参数是要添加的对象,第二个参数是要添加的属性名,第三个参数是对象,其中的value是添加的属性对应的值,enumerable就是是否可枚举,这里注意,我们添加的是不可枚举的,所以直接打印obj,是不会打印出c这个属性的
let obj = {
a: "a",
b: function () {
console.log("b");
},
}
Object.defineProperty(obj, "c", {
value: '我是添加的非枚举属性的c',
enumerable: false
})
console.log(obj.c);//输出‘我是添加的非枚举属性的c’
所以我们添加完之后,去输出一下
let obj = {
a: "a",
b: function () {
console.log("b");
},
}
Object.defineProperty(obj, "c", {
value: '我是添加的非枚举属性的c',
enumerable: false
})
console.log(Object.keys(obj).includes('c'));//输出false
相反,我们将可枚举改成true
let obj = {
a: "a",
b: function () {
console.log("b");
},
}
Object.defineProperty(obj, "c", {
value: '我是添加的非枚举属性的c',
enumerable: true
})
console.log(Object.keys(obj).includes('c'));//输出true
3.使用Object.prototype.hasOwnProperty(key)
hasOwnProperty() 方法返回一个布尔值,表示对象所有的自有属性(包括枚举和非枚举,并且不是从原型链继承来的属性)中是否具有指定的属性。
hasOwnProperty,因为有own,所以很好理解,返回的就是完全自有的属性值
let obj = {
a: "a",
b: function () {
console.log("b");
},
}
Object.defineProperty(obj, "c", {
value: '我是添加的非枚举属性的c',
enumerable: false
})
console.log(obj.hasOwnProperty('c'));//输出true
4.使用in关键字
如果指定的属性在指定的对象或其原型链中,则 in 运算符返回 true,他会判断指定属性,是否存在当前对象或其原型链中
我们首先输出一下当前对象的属性
let obj = {
a: "a",
b: function () {
console.log("b");
},
}
Object.defineProperty(obj, "c", {
value: '我是添加的非枚举属性的c',
enumerable: false
})
console.log("c" in obj);//输出true
我们现在obj的原型链上添加一个属性, 再来使用in关键字输出一下原型链上的属性是否存在
let obj = {
a: "a",
b: function () {
console.log("b");
},
}
Object.defineProperty(obj, "c", {
value: '我是添加的非枚举属性的c',
enumerable: false
})
obj.__proto__ .aaa= "我是aaa"
console.log("aaa" in obj);//输出true
本次的分享就到这,请大家用发财的小手点点赞🙋