擴充套件運算子解構賦值物件注意點

2021-09-19 13:07:12 字數 898 閱讀 3194

1 解構賦值的拷貝是淺拷貝,即如果乙個鍵的值是復合型別的值(陣列、物件、函式)、那麼解構賦值拷貝的是這個值的引用,而不是這個值的副本。

let obj=}

let = obj

obj.a.b=3

console.log(x.a.b) //3

2擴充套件運算子的解構賦值,不能複製繼承自原型物件的屬性。***

let o1=

let o2=

o2.__proto__=o1

let = o2

console.log(o2.a) // 1

console.log(x.a) // undefined 因為o1是o2的原型,所以x無法複製

***

const o=object.create()

o.z=3 //o物件自身的屬性是z,而x和y是原型上的屬性

let = o x解構賦值可以得到o的屬性x的值,但是newobj是擴充套件運算解構,並不會獲取原型上的屬性,所以newobj=

let = newobj

console.log(x,y,z) //1,undefined,3

3 物件的擴充套件運算子等同於使用object.assign()方法。

object.assign()方法用於將所有可列舉屬性的值從乙個或多個源物件複製到目標物件。它將返回目標物件。 

object.assign()拷貝的是屬性值。假如源物件的屬性值是乙個物件的引用,那麼它也只指向那個引用。

let aclone = ;

// 等同於

let aclone = object.assign({}, a);

陣列的解構賦值和擴充套件運算子

在es6中 按照一定的模式 從陣列中提取數值 對對應的變數進行賦值的操作 就叫做解構賦值 本質上來講 解構賦值 就是模式匹配 基本用法 var a,b,c 1,2,3 本質上,這種寫法屬於 模式匹配 只要等號兩邊的模式相同,左邊的變數就會被賦予 對應的值 1 如果想要解構賦值成功 那麼就必須保證兩邊...

擴充套件運算子和解構賦值的理解

var foo function a,b,c var arr 1,2,3 傳統寫法 foo arr 0 arr 1 arr 2 使用擴充套件運算子 foo arr 1 2 3 陣列深拷貝 var arr2 arr var arr3 arr console.log arr arr2 true,說明ar...

擴充套件賦值運算子以及關係運算子

如 int a 3 賦值就是把3的值給予變數a.擴充套件賦值運算子 運算子用法舉例 等效的表示式 a b a a b a b a a b a b a a b a b a a b a b a a b 其他用法舉例 int a 2 int b 3 a b 3 相當於a a b 3 a b 3 相當於a ...