JavaScript的in操作符可以用来判断一个属性是否属于一个对象,也可以用来变量一个对象的属性
console.log('name' in {name:'1111'})
console.log('name' in {age:11})
Reflect是在ES2015新增的一个内置对象,提供了与Javascript对象交互的方法。
判断一个对象是否存在某个属性,和 in 运算符] 的功能完全相同。
用法:Reflect.has(obj, propName)
Reflect.has({name:"搞前端的半夏"}, "name"); // true
Reflect.has({name:"搞前端的半夏"}, "age"); // false
Reflect.has({name:"搞前端的半夏"}, "toString"); //true
hasOwnProperty这个方法可以用来检测一个对象是否含有特定的自身属性,即是用来判断一个属性是定义在对象本身而不是继承自原型链的
o = new Object();
o.name = '搞前端的半夏';
o.hasOwnProperty('name'); // 返回 true
o.hasOwnProperty('toString'); // 返回 false
o.hasOwnProperty('hasOwnProperty'); // 返回 falseo={name:"搞前端的半夏"}
o.hasOwnProperty('name'); // 返回 true
o.hasOwnProperty('toString'); // 返回 false
o.hasOwnProperty('hasOwnProperty'); // 返回 false
用法:Object.prototype.hasOwnProperty.call(obj, propName);,接受两个参数。请注意我们这里用到了call。改变this的指向。
Object.prototype.hasOwnProperty除了支持hasOwnProperty的相同用法,同时还解决了hasOwnProperty的两个缺点。
o={hasOwnProperty:"搞前端的半夏"}
Object.prototype.hasOwnProperty.call.hasOwnProperty(o,'name'); // 返回false
Object.hasOwn(),目前来看就是替代Object.prototype.hasOwnProperty.call()。
function hasOwn(obj, propName) {return Object.prototype.hasOwnProperty.call(obj, propName);
}Object.hasOwn({name: '搞前端的半夏'}, 'name') // true
Object.hasOwn({}, 'name') //false
Object.hasOwn({}, 'toString') //false
Object.hasOwn(Object.create(null), 'name') //false
Object.hasOwn({hasOwnProperty: 'yes'}, 'name') //false
Object.hasOwn({hasOwn: 'yes'}, 'name') //false