js object方法总结(一)

object常见总结 ---方法很多,内容优点多,希望可以耐心看完,会分几篇文章写。

  1. Object.assign(target,...source)
    这是es5一个算是比较常用的一个方法吧,不算太陌生,在没有扩展运算符...之前这个是合并对象的好方法。
    Object.assign(target,...source)它不是一个深拷贝,只是浅拷贝。
    -方法:往target(第一个参数)放入source中的属性,如果属性重复,取最靠后的属性,有返回值,会返回合并完的对象(也就是第一个参数),第一个参数的对象也会改变。
    这个说的不是很清楚直接上例子。
    <script>
        
        let a={
            b:123
        }
        let b={
            a:123,
            c:123
        }
        let c={
            c:234,
            d:789
        }
        let z=Object.assign(a,b,c)
        console.log(z,a)
        console.log(z===a)
    </script>
图片.png

对比一下es6的扩展运算符

    <script>
        
        let a={
            b:123
        }
        let b={
            a:123,
            c:123
        }
        let c={
            c:234,
            d:789
        }

        let w={...a,...b,...c}
        console.log(w)
    </script>
图片.png

作用是基本一样的,只不过Object.assign会改变对象。

  1. Object.create(obj.prototype,[propertiesObject])
    这个方法在框架中可以说是必有的,可能新手会觉得用这个方法就是装x,但其实不然。
    -方法解读:返回一个以第一个参数为原型,后面参数为属性的对象。注意只有两个参数,如果有第三个也没用
    <script>
        let obj1= {
            name:'小明',
            age:18
        }
        let obj2=Object.create(obj1) //把obj1当成原型
        obj2.work='js学习'
        console.dir(obj2)
    </script>

图片.png
    <script>
        let obj1={}//为什么写框架的大神们不用这个呢,因为会附带原型上面的东西,不够干净
        let obj2=Object.create(Object.prototype)//obj1定义的方式等于obj2
        //注意:使用的是原型,不是构造函数,是一个对象!!! 如果使用的是构造函数会变成方法。
        let obj4=Object.create(Object)
        console.log(obj4)
        console.log(obj1)
        let obj3=Object.create(null)//这个没有原型,更为干净,所以很多框架会使用这种形式
        
    </script>
图片.png

分析一下第二个参数

    <script>
       let obj0= {
            name:'小明',
            age:18
        }
            let obj1=Object.create(obj0,{work:{
                value:'js学习',
                enumerable:true,//支持枚举 这些内容会在defineProperty中讲解
                configurable:true,//配置
                writable:true//是否可以修改
            }})
            console.dir(obj1)
    </script>
图片.png

3.Object.defineProperties(obj,props)
方法:直接在对象上定义或者修改原有属性。返回值:返回修改过后的对象。

    <script>
        let a={
            a:1,
            b:2,c:3
        }
        let b=Object.defineProperties(a,{'a':{
            value:2
        },
        'd':{value:999,enumerable:false}
        })
        console.log(a,b)
        console.log(a===b)
    </script>
图片.png

4.Object.defineProperty(obj,key,prop)
如果学习过vue2的朋友们,肯定知道这个方法,vue2数据绑定就是使用了这个方法,vue3的时候改成了proxy。
方法:方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

        let a={
            b:123
        }
        var bValue = 0;
        Object.defineProperty(a,'b',{
            value:234
        })
        // console.log(a.b)
          //第三个参数是一个对象{},里面存放着enumerable(枚举) value(数据属性) setget(访问器属性)
          //configurable (配置) writable(是否可改数值)
         // 1.enumerable
         //是否支持枚举,默认值为false,如果支持枚举的话,可以在in ...扩展符中使用该参数
         //如果不支持就不可以通过for in ...
         //不支持枚举可以使用 Object.getOwnPropertyNames(obj)访问到 这个方法后面会题到
         //2.value 这个就是对应的属性值,没什么可说性 value:123 就是参数值为123
         //3.set  get   
         //set(xxx) 接受一个参数,如果为空,则为undefined  当修改属性值时,会调用set,执行里面的内容
         //get() 必须有return值  ,如果没有则为undefined,当调用结果的时候,会执行get,最终返回return的值
         Object.defineProperty(a,'c',{
             set(val){ 
                    bValue=2
                 console.log('world')
                 },
             get(){console.log('hello')
                    return 'study'
             }
         })
       
        a.c=123
        console.log(a.c)
        console.log(bValue)
图片.png
    //4.configurable 这个应该是最不好理解的函数了
        //默认为configurable=false
        //当它为false时,之后再也不能进行配置此参数
        //只有writeable可以改变(而且仅限于true改成false),其他上面的方法都不可以更改(value除外,value与writeable有关)
        //至于错误情况,自己去试试吧,太多了!!我得写太久了
        let obj ={
            a:123
        }
        Object.defineProperty(obj,'b',{
            configurable:false
            ,value:'hello',
            writable:true
        })
        console.log(obj.b) //hello
        obj.b='world'
        console.log(obj.b)//world

        Object.defineProperty(obj,'b',{
            value:'hello'
        })
        
        console.log(obj.b)
        //5.writeable 是否可以改变数值,默认为false
        let aaa={

        }
        Object.defineProperty(aaa,'b',{
            value:123
        })
        console.log(aaa.b)
        aaa.b=234
        console.log(aaa.b)
      //结果还是234
        //configurable  enumerable  value   writable    get   set 默认情况
        //数据描述符 可以  可以  可以  可以  不可以 不可以
        //访问描述符 可以  可以  不可以 不可以 可以  可以
图片.png
  1. Object.entries(obj)
    方法:返回 key value的数组
    <script>
        let a={
            a:123,
            b:234,
            c:456
        }
        //顺序与for循坏一样
       let b= Object.entries(a)
       console.log(b)
        //如果是number的话,会按大小排列好
       let c={
           100:'123',
           200:'234',
           1:'456'
       }
       let d=Object.entries(c)
       console.log(d)
    </script>
图片.png
  1. Object.keys(obj)
    方法:返回obj的可枚举的键值名
    <script>
        let a={
            a:123,
            b:234
        }
        console.log(Object.keys(a))
        console.log(Object.keys('123'))
        //可以对字符串使用
    </script>
图片.png

这篇先总结这些了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容