JS遍历对象的方法及特点

1、定义一个对象

javascript 复制代码
    let obj = {
        name: 'Tom',
        age: '20',
        sex: '男',
    };
    obj.weight = '70kg';

    // obj的原型上定义属性
    Object.prototype.height = '180cm';
    Object.prototype.major = function() {
        console.log('专业:计算机应用技术');
    };

    console.log('obj', obj);

控制台输出的obj中,原型Object上添加了height和major

2、使用 for...in 循环遍历对象的属性

for...in遍历属性时,包含该实例对象的自有属性和该实例对象上的原型属性,不包含不可枚举的属性

javascript 复制代码
    for (let key in obj) {
        console.log(key, ':', obj[key]);
    }

控制台输出结果:

根据输出结果可知for......in 遍历对象会遍历实例对象原型上添加的属性。

3、Object.prototype.hasOwnProperty()

hasOwnProperty()用来检测某个属性是否是实例对象的自有属性,返回一个布尔值,若返回true,则是实例对象的自有属性,若返回false,则不是。

hasOwnProperty() 是定义在 Object.prototype 对象上的的原型方法,Object 的所有实例对象都会继承该方法。

javascript 复制代码
    console.log('name: ', obj.hasOwnProperty('name'));         // true
    console.log('weight: ', obj.hasOwnProperty('weight'));     // true
    console.log('height: ', obj.hasOwnProperty('height'));     // false
    console.log('major: ', obj.hasOwnProperty('major'));       // false

控制台输出结果:

所以可以使用for......in结合hasOwnProperty()遍历实例对象的自有属性

javascript 复制代码
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            console.log(key, ':', obj[key]);
        }
    }

控制台输出结果:

4、使用Object.keys()方法获取实例对象的所有属性,然后使用forEach()方法遍历属性

**Object.keys()**静态方法返回一个由给定对象自身的可枚举的字符串键属性名组成的数组。

javascript 复制代码
    console.log(Object.keys(obj));
    
    Object.keys(obj).forEach((key) => {
        console.log(key, ':', obj[key]);
    })

控制台输出结果:

根据输出结果可知Object.keys()方法不会获取到实例对象的原型上添加的属性。

5、Object.getOwnPropertyNames()结合forEach()

Object.getOwnPropertyNames()静态方法返回一个数组,其包含给定对象中所有自有属性(包括不可枚举属性,但不包括使用 symbol 值作为名称的属性)。

javascript 复制代码
    console.log(Object.getOwnPropertyNames(obj));

    Object.getOwnPropertyNames(obj).forEach((key) => {
        console.log(key, ':', obj[key]);
    })

控制台输出结果:

参考:

1、Object.keys()

2、Object.prototype.hasOwnProperty()

3、Object.getOwnPropertyNames()

相关推荐
程序员大阳8 小时前
副队长JavaScript教程(49)-主动抛出异常与错误类型
javascript·异常处理·error·throw·错误类型
hhhjhl8 小时前
Protobuf.js 跨端三方库仓颉适配全流程
javascript·网络·udp
Flynt11 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
slongzhang_12 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
liyi_hz200815 小时前
O2OA(翱途) V10.1 即将发布|功能再升级,安全再加固,协同更高效!
java·javascript·windows·开源软件
志尊宝16 小时前
AI原生前端开发(029):AI辅助的文档自动生成
javascript·人工智能·ai-native
一个游离的指针16 小时前
ES6新特性:let、const、块级作用域
开发语言·javascript·es6
Hilaku17 小时前
删了一个没用的 console.log,生产环境直接崩了!
前端·javascript·程序员
真上帝的左手17 小时前
2. 编程语言-JavaScript
开发语言·javascript
2601_9498477517 小时前
Form-data 跨端三方库仓颉适配全流程
前端·javascript·flutter