最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 5分钟理清遍历对象的7种方式

    正文概述 掘金(生命1昊)   2020-11-29   761
    本篇内容相关的7种方法: Object.keyObject.valuesObject.entriesObject.ownPropertyNamesObject.ownPropertySymbolsReflect.ownKeysfor...in
    1)几乎所有的方法都不能遍历 继承属性 (原型链上的属性), 特例: for...in 可以遍历 继承属性
    2)为了方便记忆我把对象的属性分类三种:普通可枚举属性(普通属性)、不可枚举属性、Symbol属性; 并把遍历的方法分为几类:
    1. 只能遍历普通属性:Object.keyObject.valuesObject.entries

    2. 普通属性 + 不可枚举:Object.ownPropertyNames

    3. 所有的Symbol属性(包括不可枚举的Symbol):Object.ownPropertySymbols

    4. 普通属性 + 不可枚举 + 所有的Symbol属性: Reflect.ownKeys

    3)for...in, 可以遍历出所有的 普通属性 (包括继承的);
    // 一般情况下原型链上的属性我是用不到的; 
    // 用的时候要注意区分是否需要遍历继承的属性
    for (const key in object) {
        if(Object.hasOwnProperty(key))
            const element = object[key];
            ... 
        }
    }
    
    测试代码:
        // 这里就直接粗暴的模拟了
        // 父级对象
        const parent = {
            a: 1, 
            b: 2, 
            c: 3,
            [Symbol('d')]: 4,
        };
        const proto = Object.create(parent);
        
        // 子级对象
        const obj = {
            f: 11, 
            i: 22, 
            j: 33,
            [Symbol('k')]: 44,
        }
        // 继承parent的属性
        obj.__proto__ = proto
        // 不可枚举的普通属性
        Object.defineProperty(obj, 'l', {
            enumerable: false,
            value: 55
        })
        // 不可枚举的Symbol属性
        Object.defineProperty(obj, Symbol('m'), {
            enumerable: false,
            value: 66
        })
    
        // 首先打印一下对象
        console.log(obj, 'obj')
        
        // 1. 普通属性
        console.log('遍历普通属性')
        console.log(Object.keys(obj), Object.values(obj), Object.entries(obj))
        
        // 2. 普通属性 + 不可枚举
        console.log('普通属性 + 不可枚举')
        console.log(Object.ownPropertyNames(obj))
        
        // 3. 遍历自身所有的Symbol属性
        console.log('遍历自身所有的Symbol属性')
        console.log(Object.ownPropertySymbols(obj))
        
        // 4. 遍历自身的所有属性
        console.log('遍历自身的所有属性')
        console.log(Reflect.ownKeys(obj))
        
        // 可遍历继承属性, 但不能遍历不可枚举 和 symbol属性
        for (const key in obj) { 
            console.log(key)
        }
    

    起源地下载网 » 5分钟理清遍历对象的7种方式

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元