欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

全面解析JS对象遍历技巧

最编程 2024-01-14 22:12:02
...

在日常JS中用的比较多,总结参考一下,方便日常工作查看

对象遍历

for...in

循环遍历对象自身和继承的可枚举属性(不含Symbol属性)

    let obj = {'0':'a','1':'b','2':'c','4':'e'};
    Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
    Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
    for(let key in obj){
        console.log(key,obj[key]);
    }

截屏2022-01-12 下午9.17.04.png

Object.keys+forEach

Object.keys返回键值数组,循环遍历对象自身(不含继承)的可枚举属性(不含Symbol属性)

    let obj = {'0':'a','1':'b','2':'c','4':'e'};
    Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
    Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
    Object.keys(obj).forEach(function(key){
        console.log(key,obj[key]);
    });

截屏2022-01-12 下午8.44.24.png

补充:Object.values 获取到的是obj中的值数组:['a','b','c']

Object.getOwnPropertyNames+forEach

Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)

    let obj = {'0':'a','1':'b','2':'c','4':'e'};
    Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
    Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
    Object.getOwnPropertyNames(obj).forEach(function(key){
        console.log(key,obj[key]);
    });

截屏2022-01-12 下午9.34.45.png

Reflect.ownKeys(obj)+forEach

Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举

    let obj = {'0':'a','1':'b','2':'c','4':'e'};
    Object.prototype['3']='d' //仅用来参考继承的属性可遍历出
    Object.defineProperty(obj,'4',{enumerable:false}) //设置obj '4 '不可以被枚举
    obj[Symbol("5")]='f'
    Reflect.ownKeys(obj).forEach(function(key){
        console.log(key,obj[key]);
    });

截屏2022-01-12 下午9.43.35.png