首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试Object.hasOwnProperty

测试Object.hasOwnProperty
EN

Stack Overflow用户
提问于 2017-08-10 14:30:07
回答 1查看 2.3K关注 0票数 3

我有一个遍历object属性的代码实现。

代码语言:javascript
复制
for (const prop in obj) {
    propsMap[prop] = prop;
}

但正如我所说的那样,我的集成开发环境(WebStorm)建议我使用obj.hasOwnProperty(prop)添加一个属性检查,以避免迭代不存在的属性:

代码语言:javascript
复制
for (const prop in obj) {
    if (obj.hasOwnProperty(prop)) {
        propsMap[prop] = prop;
    }
}

问题是,当前的测试总是带有obj.hasOwnProperty(prop)true,覆盖率并不是我能得到的最好的,我不知道如果obj实际上没有prop属性会发生什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 14:45:08

要测试这一点,您可以创建继承其原型的对象

代码语言:javascript
复制
const obj = Object.create({name: 'inherited'})

name将伪造obj.hasOwnProperty('name')检查。

但是有更好的选择来复制对象。例如Object.assign

代码语言:javascript
复制
Object.assign(propsMap, obj)

此外,您还应该记住,obj.hasOwnProperty检查很容易出错。例如

代码语言:javascript
复制
const obj = {hasOwnProperty: null} // hasOwnProperty is not a function
const obj = Object.create(null) // obj wont inherit hasOwnProperty 

所以至少将它替换为

代码语言:javascript
复制
const hasOwnProperty = {}.hasOwnProperty

for(const name in obj) {
  if(hasOwnProperty.call(obj, name)) {

  }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45606054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档