做个笔记 判断对象中是否存在某个属性
本来是一个很简单的需求:
const a = {
b:1
}
本来我的需求是判断,这个a对象里面b是否存在,但是b的值不确定,他可能是布尔值false,也可能是数字0,或者是空字符。
那么if(a.b)
就不太行了,一般来说,老前端一般都是用in
操作符。
"b" in a; //true
但是es6后,一般来说,不建议这样使用的,同时不建议的还有delete
操作符。
于是问了下群友,因为我记得es6有那么一个方法,可以判断一个对象的属性是否存在,并且不会去查prototype上的内容。但是我忘了啥名字来着!
const a = {
b:1
}
a.hasOwnProperty("b"); //true
到这,基本上就行了,函数式操作判断,新的特性,完美达到我的要求!
但是,群友的又开始骚操作了
const a = {
hasOwnProperty: () => '傻了吧',
}
a.hasOwnProperty("b"); //"傻了吧"
好家伙,直接就给覆盖了继承的hasOwnProperty方法,这我就很尴尬了。
最后迫于无奈,为了准确性,我们还得这么写:
Object.prototype.hasOwnProperty.call(target,key);
但是我call基本没怎么用过,是个短板,这个可能也记不住,记个笔记!
分类:
JavaScript
标签:
javascripthasOwnProperty
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
全部评论 7
我杰哥
Google Chrome Windows 10铁牛
Google Chrome Windows 10let a = {
b: 1
}
function hasOwnProperty1 (target, key) {
return Function.prototype.call.bind(Object.prototype.hasOwnProperty)(target, key)
}
function hasOwnProperty2 (target, key) {
return Object.prototype.hasOwnProperty.call(target, key)
}
console.log(hasOwnProperty1(a, 'b'));
console.log(hasOwnProperty2(a, 'b'));[调皮]
木灵鱼儿
FireFox Windows 10铁牛
Google Chrome Windows 10木灵鱼儿
FireFox Windows 10铁牛
Google Chrome Windows 10function hasOwnProperty () {
return Function.prototype.apply.bind(Object.prototype.hasOwnProperty);
}
//使用方法
a.hasOwnProperty('b')
木灵鱼儿
FireFox Windows 10