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
相关推荐
我命由我1234514 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
Halo_tjn14 小时前
Java Set集合相关知识点
java·开发语言·算法
Linsk15 小时前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
当时只道寻常15 小时前
浏览器文本复制到剪贴板:企业级最佳实践
javascript
许彰午15 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
大飞记Python15 小时前
【2026更新】Python基础学习指南(AI版)——04数据类型
开发语言·人工智能·python
Alice-YUE16 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
云泽80816 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
froginwe1116 小时前
DOM 加载函数
开发语言
Hello eveybody16 小时前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp