9 物件的新增方法之assign

2022-04-10 18:36:28 字數 1316 閱讀 9873

object.assign()方法是es6裡面物件的擴充套件。它的功能是將源物件的屬性或方法複製到目標物件上面。

一、使用

object.assign(),將源物件的所有可列舉屬性複製到目標物件。

方法裡面的第乙個引數為目標物件,後面的為源物件。如果兩種物件存在同名屬性,後面的會覆蓋掉前面的。如果不寫源物件,則只返回目標物件。

let ta=;

let s1=;

object.assign(ta,s1);

二、注意點

(1)該方法是淺複製,也就是說,如果源物件的某個屬性的值是物件,那麼目標物件複製得到的是這個物件的引用。

也就像是乙個指標,指向該屬性值所在的位置,所以裡面的值變化,得到的也會變化。**如下:

var obj2=;

let obj3=};

object.assign(obj2,obj3);

obj3.like.reading="納博科夫";

console.log(obj3.like.reading);

//納博科夫

console.log(obj2.like.reading);//

納博科夫

淺複製的麻煩在於同名屬性的覆蓋,如果有同名屬性,源物件的屬性值會替換掉目標物件的屬性值。但是我們通常希望原來的屬性加上源物件的屬性,即想要擴充套件,而不是替換掉,所以要注意。

(2)如果源物件為乙個陣列,會將index當做屬性名,存入目標物件中。 

var obj2=;

object.assign(obj2,[0,1,2]);

console.log(obj2)

//

三、assign的常見用途

(1)為物件新增屬性

(2)為物件新增方法

(3)轉殖物件

(4)合併物件

(5)為屬性指定預設值

注意,由於淺複製,如果存在同名屬性,目標物件和源物件只能是簡單型別。否則,源物件的同名屬性會徹底覆蓋目標物件的同名屬性,而不是擴充套件目標物件的屬性。

比如下面這段**,兩個物件存在同名屬性url,本意是想要只修改port,但因為淺複製,把host用空給覆蓋掉了,只剩下了重新賦值的port.

const defaulturl=,

}function

processcontent(option)

object.assign(obj, defaulturl,option);

console.log('obj-->>', obj); //}}

var newurl=processcontent(});

9 物件的擴充套件

es6一共有5種方法可以遍歷物件的屬性。1 for.in for.in迴圈遍歷物件自身的和繼承的可列舉屬性 不含symbol屬性 2 object.keys obj object.keys返回乙個陣列,包括物件自身的 不含繼承的 所有可列舉屬性 不含symbol屬性 3 object.getownp...

ES6 物件的新增方法

object.assign object.assign方法用於物件的合併,將源物件 source 的所有可列舉屬性,複製到目標物件 target const target const source1 const source2 object.assign target,source1,source2...

ES6物件的新增方法

es5 比較兩個值是否相等,只有兩個運算子 相等運算子 和嚴格相等運算子 它們都有缺點,前者會自動轉換資料型別,後者的nan不等於自身,以及 0等於 0。j ascript 缺乏一種運算,在所有環境中,只要兩個值是一樣的,它們就應該相等。es6 提出 same value equality 同值相等...