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
相关推荐
平山几秒前
JavaScript 深拷贝与浅拷贝:代码示例
前端·javascript
东方珵蕴10 分钟前
COBOL语言的折线图
开发语言·后端·golang
知识中的海王11 分钟前
js逆向入门图灵爬虫练习平台 第四题学习
开发语言·前端·javascript
光算科技11 分钟前
无限滚动(Infinite Scroll)页面谷歌不收录!必须改回分页吗?
java·开发语言
重生之我要成为代码大佬13 分钟前
从零讲透DFS-深度优先搜索-2(排序与组合)
开发语言·python·算法·深度优先遍历
那年那棵树14 分钟前
【爬虫】网易云音乐评论数据爬取
javascript·爬虫·python
双叶83620 分钟前
(51单片机)独立按键控制流水灯LED流向(独立按键教程)(LED使用教程)
c语言·开发语言·数据结构·单片机·嵌入式硬件·游戏·51单片机
平山27 分钟前
JavaScript 拷贝技术全解析:从浅拷贝到深拷贝
前端·javascript
褚眠莘28 分钟前
Lua语言的边缘计算
开发语言·后端·golang
花开路口29 分钟前
前端工程化-测试jest
前端·javascript