Object.prototype.hasOwnProperty.call 为什么要在for in 场景中使用

文章目录

问题

我们在使用 for… in使用场景的时候,经常会发现一般的写法是这样的

 for (const key in structList.value) {
    if (Object.prototype.hasOwnProperty.call(structList.value, key)) {
        const element = structList.value[key];
        console.log(element);
    }
}

那么 Object.prototype.hasOwnProperty.call 为什么要在for in 场景中使用

分析

在 JavaScript 中,使用 Object.prototype.hasOwnProperty.call 主要是为了确保在使用 for…in 循环遍历对象属性时,获取对象自身的属性而不包括继承的属性

举个例子,考虑以下对象:

let obj = {
    a: 1,
    b: 2
};

// 给 obj 对象添加一个继承属性
Object.prototype.c = 3;

// 使用 for...in 遍历对象属性
for (let key in obj) {
    console.log(key);
}

上述代码中,for…in 循环将会输出所有的键,包括继承自原型链的键 c。如果我们只想获取对象自身的属性而不包括继承的属性,我们可以使用 hasOwnProperty 方法来检查属性是否是对象自身的属性:

for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
        console.log(key);
    }
}

然而,由于可能存在 hasOwnProperty 方法被覆盖的情况,为了避免潜在的问题,可以使用 Object.prototype.hasOwnProperty.call 来进行检查:

for (let key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
        console.log(key);
    }
}

这样做可以确保我们在遍历对象属性时只获取对象自身的属性,而不包括继承的属性

相关推荐

  1. 为什么 Golang 使用指针

    2024-03-23 07:48:01       39 阅读
  2. Android 为什么使用 Binder 机制?

    2024-03-23 07:48:01       37 阅读
  3. 为什么使用ElasticSearch?

    2024-03-23 07:48:01       46 阅读
  4. uvm使用clone时,为什么使用$cast

    2024-03-23 07:48:01       26 阅读
  5. SQL为什么使用1=1

    2024-03-23 07:48:01       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 07:48:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 07:48:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 07:48:01       82 阅读
  4. Python语言-面向对象

    2024-03-23 07:48:01       91 阅读

热门阅读

  1. 1.1-数组-704. 二分查找★

    2024-03-23 07:48:01       38 阅读
  2. C++中的vector简介

    2024-03-23 07:48:01       42 阅读
  3. 学习笔记3/22

    2024-03-23 07:48:01       45 阅读
  4. 【无标题】vscode setting配置

    2024-03-23 07:48:01       42 阅读
  5. C语言如何计算字符串中有多少个单词?

    2024-03-23 07:48:01       42 阅读
  6. SQLAlchemy快速入门

    2024-03-23 07:48:01       40 阅读
  7. Oracle 去除重复记录SQL

    2024-03-23 07:48:01       38 阅读
  8. IOS面试题编程机制 16-20

    2024-03-23 07:48:01       37 阅读
  9. 机器学习流程—迁移学习 模型微调

    2024-03-23 07:48:01       45 阅读