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);