Javascript 是否有ES6+;是否可以替代Object.prototype.hasOwnProperty.call(obj,键)?

Javascript 是否有ES6+;是否可以替代Object.prototype.hasOwnProperty.call(obj,键)?,javascript,Javascript,检查对象是否具有特定密钥的最可靠的方法是: Object.prototype.hasOwnProperty.call(obj, key) 这提供了某些保证:如果key是obj的direct属性,它将只计算为true,即使obj没有通常的对象作为其原型(例如,如果它是使用const obj=Object.create(null)创建的),它也会工作 但这是一口 ES6或更高版本(包括polyfillable或Babel Compiled“Propositions”)中是否有任何新的语法/方法可以

检查对象是否具有特定密钥的最可靠的方法是:

Object.prototype.hasOwnProperty.call(obj, key)
这提供了某些保证:如果
key
obj
direct属性,它将只计算为
true
,即使
obj
没有通常的
对象作为其原型(例如,如果它是使用
const obj=Object.create(null)
创建的),它也会工作

但这是一口


ES6或更高版本(包括polyfillable或Babel Compiled“Propositions”)中是否有任何新的语法/方法可以提供相同的保证,但以更好、更易读的方式?

我不知道这方面有什么语法优势。但是你不需要经常使用它,所以偶尔写出来也不会太糟糕。可能是

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

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

1:在大多数情况下,您可以省略检查,改为在
中使用
,或者应该使用一个舒适的
Map

为什么不将其别名为变量?i、 e.
const iHaz=Object.prototype.hasOwnProperty
然后像
const iDoHaz=iHaz.call(obj,key)
那么,既然你几乎不需要使用它,那么问题出在哪里呢?
const has=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop)
是我通常使用的别名。我能想到的唯一一个可以缩短它的下一个特性是bind操作符,在这里它并不是什么好东西:
obj::Object.prototype.hasOwnProperty(key)
@callum实际上我想你可以将它与Bergi的答案结合起来,得到
obj:({}).hasOwnProperty(key)
但就可读性而言,这是一个损失,我不确定优先级是如何工作的,甚至不确定绑定操作符建议的优先级是否稳定。
const hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);
const hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);