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

时间:2017-07-20 13:09:22

标签: javascript

检查对象是否具有某个密钥的最安全的方法是:

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

这提供了一定的保证:如果truekey直接属性,它只会评估为obj,即使{{{}}也会有效1}}没有通常的obj作为其原型(例如,如果它是使用Object创建的)。

但它是满口的。

ES6或更高版本中是否有任何新的语法/方法(包括可填充或可编辑的Babel)可以提供相同的保证,但是更好,更易读?

1 个答案:

答案 0 :(得分:5)

我不知道任何语法糖。但你不应该经常使用这个 1 ,所以偶尔写出来也不应该太糟糕。 equivalent shorter version将是

({}).hasOwnProperty.call(obj, key)

如果你真的需要更频繁地使用它,只需定义辅助函数:

const hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);
const hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);

1:在大多数情况下,您可以省略检查,改为使用in,或使用Map并使用舒适的has method < / p>