Object.prototype.hasOwnProperty.call()

之前判定是否含有该key的方法一直是 !!obj[key] 后面看到了更加规范的,记录下

JavaScript中Object对象原型上的hasOwnProperty() 用来判断一个属性是定义在对象本身而不是继承自原型链。

Object.prototype.hasOwnProperty.call()_第1张图片

从console的test可以看出来,它可以判定该key是否存在于object中.但是既然这样可以实现,为什么还要使用Object.prototype.hasOwnProperty.call() 这么复杂的写法呢.

在这里插入图片描述
这个test可以看出来,明明a是object的属性,为什么返回是false呢? 因为javascript没有将hasOwnProperty作为一个敏感词,所以我们很有可能将对象的一个属性命名为hasOwnProperty,这样一来就无法再使用对象原型的 hasOwnProperty 方法来判断属性是否是来自原型链。

Object.prototype.hasOwnProperty.call()_第2张图片

Object.prototype.hasOwnProperty.call(Object,key)

这样一来,就可以准确判断了.

Enhance

ES6也可以使用Refect.get 或者Refect.has

https://es6.ruanyifeng.com/#docs/reflect
Object.prototype.hasOwnProperty.call()_第3张图片
Object.prototype.hasOwnProperty.call()_第4张图片

你可能感兴趣的:(js)