js遍历对象的三种方法

摘要:for in 只能遍历可枚举属性和原型链的属性;通过Object.keys(obj) 只能遍历可枚举属性 不能遍历不可枚举和原型链上的属性 //Object.values(obj) //遍历可枚举的值

1、for in   只能遍历可枚举属性和原型链的属性

var obj = new Object({a:1})
//{a:1}
Object.defineProperty(obj,'b',{value:6}) //通过defineProperty定义属性   writable 默认是false  不可枚举   
//{a: 1, b: 6}
obj.c=3 //通过这种方式定义属性  是可枚举的
3
obj
{a: 1, c: 3, b: 6}
//不能遍历不可枚举属性
for(var i in obj){console.log(i)}
output:a
output:c
Object.prototype.demo=123
//123
//输出原型链上的属性
for(var i in obj){console.log(i)}
VM27679:1 a
VM27679:1 c
VM27679:1 demo


2、通过Object.keys(obj)   只能遍历可枚举属性  不能遍历不可枚举和原型链上的属性   //Object.values(obj) //遍历可枚举的值

obj
{a: 1, c: 3, b: 6}
Object.prototype.demo=123
Object.keys(obj).forEach(key =>  {console.log(key,obj[key])})
VM27932:1 a 1
VM27932:1 c 3
//遍历可枚举的值
Object.values(obj).forEach(value=>{console.log(value)})
VM28116:1 1
VM28116:1 3


3、通过Object.getOwnPropertyNames(obj)  遍历可枚举 和不可枚举的所有属性值

Object.getOwnPropertyNames(obj)
(3) ["a", "b", "c"]


区别:

1、for in 只能遍历可枚举属性和原型链的属性

2、Object.keys  只能遍历可枚举属性

3、Object.getOwnPropertyNames 只能遍历可枚举 和不可枚举的所有属性值

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_8633