js遍历对象的三种方法
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 demo2、通过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 33、通过Object.getOwnPropertyNames(obj) 遍历可枚举 和不可枚举的所有属性值
Object.getOwnPropertyNames(obj)
(3) ["a", "b", "c"]区别:
1、for in 只能遍历可枚举属性和原型链的属性
2、Object.keys 只能遍历可枚举属性
3、Object.getOwnPropertyNames 只能遍历可枚举 和不可枚举的所有属性值
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!