是否有ES6 +替代品可以做Object.prototype.hasOwnProperty.call(obj,key)?

cal*_*lum 7 javascript

检查对象是否具有特定键的最防弹的方法是:

Object.prototype.hasOwnProperty.call(obj, key)
Run Code Online (Sandbox Code Playgroud)

这提供了一定的保证:它将仅求值为trueif key是的直接属性obj,即使obj不具有通常Object的原型,它也将起作用(例如,如果使用创建的const obj = Object.create(null))。

但这是一口。

ES6或更高版本中是否有任何新的语法/方法(包括可填充或可与Babel兼容的“建议”)提供相同的保证,但以一种更好,更易读的方式提供?

Ber*_*rgi 8

我不知道有什么语法上的糖。但是您不必经常使用1,因此偶尔将其写出来也不错。一个相当于较短的版本将是

({}).hasOwnProperty.call(obj, key)
Run Code Online (Sandbox Code Playgroud)

如果您确实需要更频繁地使用它,只需定义一个辅助函数:

const hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);
const hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);
Run Code Online (Sandbox Code Playgroud)

1:在大多数情况下,您可以省略检查,in改为使用,或者应该使用Map其舒适的has方法


Fab*_*oli 5

Object.hasOwn已添加到对象标准 API 中。现在所有主要浏览器都支持它。