美文网首页
5种js遍历对象属性的方法

5种js遍历对象属性的方法

作者: mudssky | 来源:发表于2021-02-03 17:59 被阅读0次

    ES6 一共有 5 种方法可以遍历对象的属性。

    (1)for...in

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

    (2)Object.keys(obj) ie9

    Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

    (3)Object.getOwnPropertyNames(obj) ie9

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

    (4)Object.getOwnPropertySymbols(obj)

    Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

    (5)Reflect.ownKeys(obj)

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

    以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

    • 首先遍历所有数值键,按照数值升序排列。
    • 其次遍历所有字符串键,按照加入时间升序排列。
    • 最后遍历所有 Symbol 键,按照加入时间升序排列。

    ​ 其中兼容性最好的是for... in来进行遍历,因为我们通常只需要遍历对象自身拥有的属性 所以使用 Object.prototype.hasOwnProperty() 兼容到ie5.5 方法来排除继承的属性

    for (var key  in targetObj) {
        if (Object.prototype.hasOwnProperty.call(targetObj, key)){
            //对筛选出的对象自身拥有的key进行处理
        }
    }
    

    注意:即使属性的值是 nullundefined,只要属性存在,hasOwnProperty 依旧会返回 true

    ​ 如果不在意兼容性问题,用keys方法,搭配for... of来遍历也不错,、

    ​ for...of是es6引入的用于遍历可迭代对象的语法,相当于python里的for in。

    ​ js的for...in别扭的地方在于,遍历数组和对象都是返回的key值,遍历数组是下标值。for...of遍历数组会返回每一个值,跟foreach类似的效果,但是对于对象,只支持实现了迭代器的对象。

    for (const key of Object.keys(targetObj)) {
        //对遍历到的key值进行处理
    }
    

    相关文章

      网友评论

          本文标题:5种js遍历对象属性的方法

          本文链接:https://www.haomeiwen.com/subject/fijmtltx.html