js內置對象-Object

Javascript-Object

好好學習,天天向下!

js中的一些內置方法還是挺好用的,使用它們有時候會節省我們很多時間,還有減少代碼量

一、Object.keys(obj)

獲取一個對象的key值,但是參數obj必須是可枚舉的對象,他會返回一個包含對象自身的所有可枚舉屬性值的數組

  let obj = {
        a: 1,
        b: 2,
        c: 3,
        d: 4,
        e: {
            a: 1,
            b: 2
        },
        abc: 123
    };
    let keys = Object.keys(obj);
    console.log(keys);//["a", "b", "c", "d", "e", "abc"]

二、Object.values(obj)

獲取一個對象value值,同樣參數obj也必須是可枚舉的對象,他會返回一個包含對象自身的所有可枚舉屬性值的數組

 let values = Object.values(obj);
    console.log(values);//[1, 2, 3, 4, {…}, 123]

注意: 上面兩個方法所返回的數組和你去for...in的值的順序是一樣的,所以可以放心使用

三、Object.assign(target, …sources)

對對象進行深拷貝( 僅適用於第一層 ),下面給出兩個例子進行對比

一般的對象賦值(淺拷貝)

 let target = {};
    let sources = {
        A: 1,
        B: 2
    };
    target = sources;
    console.log(target, sources);//{A: 1, B: 2} {A: 1, B: 2}

    sources.B = 3;
    target.A = 4;
    console.log(target, sources);//{A: 4, B: 3} {A: 4, B: 3}
    target = {};
    sources = {
        A: 1,
        B: 2
    };

target和sources已經緊緊的綁在了一起,不管改變哪一個另一個對象都會隨之改變

使用Object.assign(target, …sources)進行深拷貝

target = {};
    sources = {
        A: 1,
        B: 2
    };

    Object.assign(target, sources);
    console.log(target, sources);//{A: 1, B: 2} {A: 1, B: 2}

    sources.B = 3;
    target.A = 4;
    console.log(target, sources);//{A: 4, B: 2} {A: 1, B: 3} 

可見target中的元素並不會隨着sources中元素的改變而改變,反之亦然

注意: 使用Object.assign(target, …sources)也僅僅只能把對象第一層的元素進行深拷貝,第二乃至第N層的還是淺拷貝,在此是可以使用遞歸進行判斷子元素是否爲對象,如果是對象則使用Object.assign(target, …sources)進行拷貝即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章