我是靠谱客的博主 美满铃铛,最近开发中收集的这篇文章主要介绍js遍历对象注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

	// 定义一个 person 对象
    let person = {
        name: '孙悟空',
        [Symbol('age')]: 18
    }
    Object.defineProperties(person, {
        skill: {
            value: '七十二变',
            enumerable: false,
        },
        [Symbol('birthday')]: {
            value: '2021-07-21',
            enumerable: false,
        }
    })
    Object.defineProperties(person.__proto__, {
        teacher: {
            value: '唐僧',
            enumerable: true,
        },
        task: {
            value: '西天取经',
            enumerable: false,
        },
        [Symbol('country')]: {
            value: '中国',
            enumerable: true
        },
        [Symbol('hometown')]: {
            value: '花果山',
            enumerable: false,
        },
    })

浅颜色的属性都是不可枚举的属性,__proto__下的属性则为其原型上(即 Object.prototype)的属性,Symbol 类型的值自然为 Symbol 属性。

在这里插入图片描述

for…in

包含自身原型上所有可枚举属性,但不包含Symbol属性

    for(let key in person) {
        console.log(key)
    }
    // name
    // teacher

当不需要原型上的属性时

    for(let key in person) {
        if (person.hasOwnProperty(key)) {
            console.log(key)
        }
    }
    // name
Object.keys/Object.values/Object.entries

包含自身所有可枚举属性,但不包含原型上的所有属性和Symbol属性

    console.log(Object.keys(person))       	// ['name']
    console.log(Object.values(person))		// ['孙悟空']
    console.log(Object.entries(person))		// [['name', '孙悟空']]
Object.getOwnPropertyNames

包含自身所有属性(包括可枚举和不可枚举),但不包含原型上的所有属性和Symbol属性

	console.log(Object.getOwnPropertyNames(person))		//  ['name', 'skill']
Object.getOwnPropertySymbols

包含自身所有Symbol属性(包括可枚举和不可枚举),但不包含原型上所有属性

  console.log(Object.getOwnPropertySymbols(person))		// [Symbol(age), Symbol(birthday)]
Reflect.ownKeys

包含自身所有属性(包括可枚举、不可枚举和Symbol属性),但不包含原型上所有属性。

   console.log(Reflect.ownKeys(person))		//  ['name', 'skill', Symbol(age), Symbol(birthday)]
总结
  1. 只有for...in可以遍历到对象原型上的属性
  2. 只有Object.getOwnPropertySymbolsReflect.ownKeys 能访问到对象上Symbol属性
  3. Object.getOwnPropertyNamesObject.getOwnPropertySymbolsReflect.ownKeys 访问的属性包括可枚举和不可枚举
  4. Object.getOwnPropertyNames+Object.getOwnPropertySymbols = Reflect.ownKeys

最后

以上就是美满铃铛为你收集整理的js遍历对象注意事项的全部内容,希望文章能够帮你解决js遍历对象注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部