WithCoderWithCoderWithCoder

Javascript中枚举(遍历)对象属性的方法及其区别

    Javascript对象可以看做是属性的集合,在开发时,我们经常会枚举(遍历)对象的属性。

    我们可以使用以下方式进行判断:

    1. for in: 会遍历对象中所有的可枚举属性(包括自有属性和继承属性)

    2. Object.keys(): 会返回一个包括所有的可枚举的自有属性的名称组成的数组

    3. Object.getOwnPropertyNames(): 会返回自有属性的名称 (不管是不是可枚举的)

    下面我们对以上几种判断方法做简单的介绍:

    1. for in

    for in 会遍历对象中所有的可枚举属性(包括自有属性和继承属性)。举例如下:

    <script>
        // 创建一个实例对象
        var o = Object.create({
            name: 'neil'
        });

        // 给实例对象设置属性
        o.age = 100;
        // 给实例设置一个不可枚举的属性
        Object.defineProperty(o'sex', {
            value: '1',
            enumerable: false
        });

        for (p in o) {
            console.log(p); // 输出:name,age
        }
    </script>

    从上面代码的运行结果可以看出,for in会遍历对象的自有和继承的可枚举属性。给对象o设置的不可枚举属性sex,没有被遍历到。

    2.  Object.keys()

    Object.keys()方法会返回一个包括所有的可枚举的自有属性的名称组成的数组。举例如下:

    <script>
        // 创建一个实例对象
        var o = Object.create({
            name: 'neil'
        });

        // 给实例对象设置属性
        o.age = 100;
        // 给实例设置一个不可枚举的属性
        Object.defineProperty(o'sex', {
            value: '1',
            enumerable: false
        });

        console.log(Object.keys(o)); // 输出:["age"];继承的name和自身不可枚举的sex属性没有返回
    </script>

    3. Object.getOwnPropertyNames()

    Object.getOwnPropertyNames()方法会返回自有属性的名称组成的数组 (不管是不是可枚举的)。举例如下:

    <script>
        // 创建一个实例对象
        var o = Object.create({
            name: 'neil'
        });

        // 给实例对象设置属性
        o.age = 100;
        // 给实例设置一个不可枚举的属性
        Object.defineProperty(o'sex', {
            value: '1',
            enumerable: false
        });

        console.log(Object.getOwnPropertyNames(o)); // 输出数组:["age","sex"]
    </script>

    在使用的过程中,我们经常会遍历对象的自有属性(并且自定义对象的属性基本都是可枚举的),用到最多的可能是Object.keys()。

欢迎分享交流,转载请注明出处:WithCoder » Javascript中枚举(遍历)对象属性的方法及其区别