JS获取对象属性的各种方式和区别(自身/原型属性、可枚举/不可枚举)
2021/7/16 23:14:00
本文主要是介绍JS获取对象属性的各种方式和区别(自身/原型属性、可枚举/不可枚举),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
对象的属性有自身属性和原型属性之分,自身属性是对象自己的属性,原型属性是存在于原型链上的属性。
可以用Object.prototype.hasOwnProperty()判断是自身属性还是原型属性。(in操作符只可以判断对象是否有某个属性,不能判断是自身的,还是原型上的)
对象属性也有可枚举和不可枚举之分,可枚举属性的属性描述符enumerable为true,不可枚举属性的为false。
原生对象的大多数属性都是不可枚举的,比如数组和字符串的length,对象原型上的一些方法和属性,比如toString、constructor、hasOwnProperty等等
下面看下都有哪些方式可以获取对象的属性
Object.keys()
返回自身的可枚举属性组成的数组 (不包含symbol)
Object.getOwnPropertyNames()
返回所有的自身属性 组成的数组 (不包含symbol)
Object.getOwnPropertySymbols()
返回自身所有的Symbol属性组成的数组
for...in
遍历对象的所有可枚举属性
区别
可枚举 | 可枚举和不可枚举 | |
---|---|---|
仅自身属性 | Object.keys | Object.getOwnPropertyNames |
自身和原型属性 | for...in |
没有原生的方法可以获取对象上所有的属性,包含自身和原型、可枚举和不可枚举,需要自己实现,示例如下:
function getAllkeys (obj) { const keys = [] let temp = obj while (temp) { keys.push.apply(keys, Object.getOwnPropertyNames(temp)) keys.push.apply(keys, Object.getOwnPropertySymbols(temp)) temp = Object.getPrototypeOf(temp) } return keys }
for...of 和 for...in的区别
for let i in obj 是以任意顺序遍历对象的可枚举属性,i是key
for let value of iterable 是按顺序迭代一个可迭代对象,i是值
iterable可迭代对象包括:Array、Map、Set、String、TypedArray、arguments
这篇关于JS获取对象属性的各种方式和区别(自身/原型属性、可枚举/不可枚举)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略