js对象常用API(三)之Object.getOwnPropertyDescriptor、Object.entries/keys/values、Object.hasOwnProperty等解析说明

与前俩篇博客相对应,该篇继续介绍Object(对象)的常用API。

四、Object.getOwnPropertyDescriptor( obj, prop )

       获取obj这个对象的prop属性的属性描述符(property descriptor)

        example如下:

            var obj = {

                   x: 1

                 }

                console.log( Object.getOwnPropertyDescriptor( obj,"x" ) );

                //{ value: 1, writable: true, enumerable: true, configurable: true}

五、ES8新增的Object的方法

    (一)Object.entries( obj )

       获取obj这个对象的键名和键值,且以二维数组的形式输出

        example如下:

            var obj = {

                   x: 1,

                   y:2

                 }

                console.log( Object.entries( obj ) );

                //[[x,1],[y,2]]

     (二)Object.keys( obj )

       获取obj这个对象的键值,且以数组的形式输出

        example如下:

            var obj = {

                   x: 1,

                   y:2

                 }

                console.log( Object.keys( obj ) );


                //[x,y]

      (三)Object.values( obj )

       获取obj这个对象的所有键值,且以数组的形式输出

        example如下:

            var obj = {

                   x: 1,

                   y:2

                 }

                console.log( Object.values( obj ) );

                //[1,2]

        以上三个方法均为ES8新增的方法,其与for....in的区别在于for...in会遍历对象原型链上的属性,而    这三个方法不会;

六、Obj.hasOwnProperty(prop)

        Obj--------------------------------要进行验证的对象

        prop-------------------------------要进行验证的属性

        若obj中有prop这个属性,结果为true,若没有,结果为false;

        example如下:

            var obj = {

                   x: 1,

                   y:2

               }

              console.log( obj.hasOwnProperty( "x" ) );//true

              console.log( obj.hasOwnProperty( "z" ) );//false

七、Object.getPrototypeOf(obj)

        Obj--------------------------------要进行操作的对象

       该API的返回值为obj这个对象的原型链上一级的对象,即其 __proto__

        example如下:

            var obj = {

                   x: 1,

                   y:2,

                   __proto__: {

                        z: 3,

                        d: 4

                    }

               }

              console.log( Object.getPrototypeOf( obj ) );    

             //{ z:3,d:4 }

八、Object.setPrototypeOf(obj,protoObj)

        Obj--------------------------------要进行操作的对象

        protoObj---------------------要为obj设置的上一级原型对象

       将protoObj设置为obj这个对象的原型链上一级的对象,即其 __proto__,会覆盖原有proto

        example如下:

            var obj = {

                   x: 1,

                   y:2,

                   __proto__: {

                        z: 3,

                        d: 4

                    }

               }

              Object.setPrototypeOf( obj, { m:333 } ) );    

              console.log( obj )

              // { x:1,y:2,__proto__:{m:333}}//会将原有的__proto__对象覆盖掉

九、Object.freeze(obj)/Object.isFrozen(obj)

(一)Object.freeze(obj)

        Obj--------------------------------要进行操作的对象

       冻结该对象,使其无法添加、修改、删除属性,且其属性描述符(如writable、enumerable等)也均无法被修改,其该API返回值为被冻结的对象

(二)Object. isFrozen(obj)

        Obj--------------------------------要进行操作的对象

       与方法一相对应,判断该对象是否被冻结;

你可能感兴趣的:(web前端开发,原生js,Object)