【发布时间】:2017-07-20 13:09:22
【问题描述】:
检查对象是否具有特定键的最安全的方法是:
Object.prototype.hasOwnProperty.call(obj, key)
这提供了一定的保证:如果key 是obj 的直接 属性,它只会评估为true,即使obj 没有通常将Object 作为其原型(例如,如果它是使用const obj = Object.create(null) 创建的)。
但它是一口。
在 ES6 或更高版本(包括 polyfillable 或 Babel 可编译的“提案”)中是否有任何新的语法/方法可以提供相同的保证,但以更好、更易读的方式?
【问题讨论】:
-
为什么不用一个变量给它起别名呢?即
const iHaz = Object.prototype.hasOwnProperty然后像const iDoHaz = iHaz.call(obj, key)一样使用它 -
好吧,鉴于您几乎不需要使用它,有什么问题?
-
const has = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)是我通常使用的别名。 -
我能想到的唯一可以缩短此时间的 ES Next 功能是绑定运算符,在这里它的胜利并不大:
obj::Object.prototype.hasOwnProperty(key)。 -
@callum 实际上我想你可以将它与 Bergi 的答案结合起来得到
obj::({}).hasOwnProperty(key)但这在可读性方面是一个损失,我不确定优先级是如何产生的,或者即使优先级绑定算子提案已经稳定。
标签: javascript