JavaScript如何判断对象中的属性存在自身还是原型链上

1.in操作符

in 操作符会在通过对象能够访问给定属性时返回true,无论该属性存在于对象本身还是其原型链上。

javascript 复制代码
function Person(name) {
  this.name = name
}
let obj = new Person('Tom')

Person.prototype.gender = 'male'
Person.prototype.code = 23
console.log("name" in obj) // true
console.log('code' in obj) // true
console.log('gender' in obj) // true

2.obj.hasOwnProperty(prop)

hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性。

对象本身有,返回true;反之,返回false。

javascript 复制代码
function Person(name) {
  this.name = name
}
let obj = new Person('Tom')

Person.prototype.gender = 'male'
Person.prototype.code = 23

console.log(obj.hasOwnProperty('name')) // true
console.log(obj.hasOwnProperty('code')) // false
console.log(obj.hasOwnProperty('gender')) // false

3.两者结合判断属性位于对象本身还是来自于其原型链

javascript 复制代码
function Person(name) {
  this.name = name
}
let obj = new Person('Tom')

Person.prototype.gender = 'male'
Person.prototype.code = 23

function propertyFormPrototype(obj, prop) {
  return obj.hasOwnProperty(prop) && prop in obj
  //当return为true时表示属性位于对象本身
}
console.log(propertyFormPrototype(obj, 'name')) // true
console.log(propertyFormPrototype(obj, 'gender')) // false
console.log(propertyFormPrototype(obj, 'code')) // false
相关推荐
刘发财7 分钟前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
ssshooter7 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
Live000008 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉8 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化
球球pick小樱花9 小时前
游戏官网前端工具库:海内外案例解析
前端·javascript·css
喝水的长颈鹿9 小时前
【大白话前端 02】网页从解析到绘制的全流程
前端·javascript
用户14536981458789 小时前
VersionCheck.js - 让前端版本更新变得简单优雅
前端·javascript
codingWhat9 小时前
整理「祖传」代码,就是在开发脚手架?
前端·javascript·node.js
码路飞9 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
Lee川9 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试