Object.prototype.hasOwnProperty.call(item, key) 作用与用途

devtools/2024/12/24 4:12:27/

在 JavaScript 中,Object.prototype.hasOwnProperty.call(item, key) 是一种检查对象 item 是否具有特定属性 key 作为自身的属性(而不是继承自原型链)的方法。这种调用方式是安全的,特别是在处理可能被修改过原型链的对象时。

解释和用途

typescript">Object.prototype.hasOwnProperty

这是一个方法,用于检查调用它的对象是否拥有某个特定的属性作为自身的直接属性,而不是继承自其原型链。
例如,如果你有一个对象 obj = {a: 1},那么 obj.hasOwnProperty(‘a’) 返回 true,因为 a 是 obj 的直接属性。

typescript">.call(item, key):

call() 是一个函数,它允许你调用一个具有给定 this 值和单独提供的参数的函数。
在这里,Object.prototype.hasOwnProperty.call(item, key) 的意思是调用 hasOwnProperty 方法,将 item 作为 this 的上下文,并将 key 作为参数传递给这个方法。

这样做的好处是即使 item 对象本身没有 hasOwnProperty 方法(例如,如果 item 是通过 Object.create(null) 创建的),你也可以安全地检查 item 是否有 key 属性。

使用场景

在你的代码中,这个方法用于确保只处理 item 对象自己拥有的属性,而不是从其原型链继承的属性。这在处理纯数据对象时特别有用,尤其是当你不确定对象的结构或来源时。通过这种方式,你可以避免错误地处理那些可能来自原型链的属性,这些属性可能不是你想要直接操作的数据。

示例

假设你有一个对象 item,你想要遍历它的所有自有属性,并且只处理那些非空且不是 server_name 或 index 的属性:

typescript">for (const key in item) {if (Object.prototype.hasOwnProperty.call(item, key) &&key !== 'server_name' &&key !== 'index' &&item[key] !== null &&item[key] !== '') {// 处理 item[key]}
}

这段代码确保了你只处理那些确实属于 item 的属性,并且排除了那些可能不需要处理的特定属性或空值。这是一种非常严谨和安全的方式来处理对象属性,特别是在不完全控制对象内容的情况下。


http://www.ppmy.cn/devtools/144890.html

相关文章

Ubuntu安装或卸载mariadb-server软件包

1、安装mariadb-server sudo apt install mariadb-server 检查MariaDB服务器的服务状态 service mariadb status 仅需要卸载MariaDB,而不是删除所有MariaDB相关软件包 sudo apt-get remove mariadb-server 2、卸载MariaDB 从系统中完全删除MariaDB数据库&#xf…

随记:springboot的xml中sql数据库表名动态写法

随记&#xff1a;springboot的xml中数据库表名动态写法 随记&#xff1a;springboot的xml中数据库表名动态写法<![CDATA[ ${gridLayerName} ]]>&#xff0c;直接使用#{是不可以的} <select id"getYbLabelNum" resultType"java.lang.Integer">…

理解JVM

JVM简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统 常见的虚拟机&#xff1a; JVM 、 VMwave 、 Virtual Box JVM 和其他两个虚拟机的区别&#xff1a; 1…

uniapp获取内容高度

获取内容高度 getNewsHieght(index) {uni.createSelectorQuery().select(.content_${index}).boundingClientRect(rect > {console.log(打印该盒子的元素, rect.height);swiperHeight.value rect.height// console.log(打印swiperHeight的数值,this.swiperHeight);}).exec…

vue项目两种路由模式原理和应用

两种模式的区别 路由&#xff0c;让页面url改变&#xff0c;但整个html页面不重新加载&#xff0c;单页面应用&#xff0c;局部刷新页面。 1. hash原理 通过动态锚点技术重写url&#xff0c;如“http://127.0.0.1/#/XXX”&#xff0c;改变#后面的路径&#xff0c;实现切换url…

【设计模式探索——智能遍历:如何用迭代器模式优化AI数据处理】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 迭代器含义迭代器模式的优点迭代器的核心思想 世上本没有迭代器&#xff0c;不爽的人多了&#xff…

调用钉钉接口发送消息

调用钉钉接口发送消息 通过创建钉钉开放平台创建H5小程序&#xff0c;通过该小程序可以实现向企业内的钉钉用户发送消息&#xff08;消息是以工作通知的形式发送&#xff09; 1、目前仅支持发送文本消息&#xff0c;相同内容的文本只能成功发送一次&#xff0c;但是接口返回发…

一起学Git【第一节:Git的安装】

Git是什么&#xff1f; Git是什么&#xff1f;相信大家点击进来已经有了初步的认识&#xff0c;这里就简单的进行介绍。 Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds创建&#xff0c;用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行…