一:in
指定属性在指定对象或其原型链中,则 in 返回 true
缺点:如果属性来自对象的原型,它仍然会返回 true
二:Reflect.has()
三:hasOwnProperty()
对象是否具有指定的属性作为它自己的属性,但不是继承它。
如果对象是用Object.create(null)创建的话,那么就不能用这个方法了。不是由Object.create(null)创建,但是用obj.xxx的方法修改或者添加进obj中的可以使用hasOwnProperty检测
四:Object.prototype.hasOwnProperty()
直接调用内置的有效用函数,跳过原型链。检测更加准确
五:Object.hasOwn()
ES2022有一个新的方法:Object.hasOwn,相对于前四种方法,更简洁