摘要:最近在使用想到一個(gè)問題,里常用的一種語法是這樣的通過解構(gòu)賦值保留了里未修改的部分,并覆蓋修改的部分,那么現(xiàn)在問題來了,這里的新對象通過解構(gòu)得來的,是否是原來屬性的引用賦值呢我們知道,如下情況這里是的一個(gè)引用賦值。比如上例中希望可以幫助大家。
最近在使用Redux想到一個(gè)問題,Redux里常用的一種語法是這樣的:
setSth(state, { payload }) { const { newthing} = payload; return { ...state, newthing } }
Redux通過解構(gòu)賦值...state,保留了state里未修改的部分,并覆蓋修改的部分,那么現(xiàn)在問題來了,這里的新對象通過解構(gòu)得來的...state,是否是原來屬性的引用賦值呢?
我們知道,如下情況:
let state = {a: 1, b: 2} let state2 = state; state2.a = 5; // state.a === 5 => true
這里state2是state的一個(gè)引用賦值。
那么使用解構(gòu)賦值生成一個(gè)新對象會如何呢?
let state = {a: 1, b: 2} let state2 = { ...state } state2.a = 5; // state.a === 1 => true
通過實(shí)驗(yàn)可見,state2屬性的修改并沒有影響到state,所以這是一份拷貝,那么問題又來了,這個(gè)拷貝是只有一層的淺拷貝,還是遞歸進(jìn)去的深拷貝呢,我直覺地認(rèn)為是深拷貝,于是又做了一個(gè)實(shí)驗(yàn):
let state = {a: {a1: 1, a2: 2}, b: 2} let state2 = { ...state } state2.a.a1 = 5; // state.a.a1 === 5 => true
事實(shí)證明我的直覺錯(cuò)了,解構(gòu)復(fù)制到全新對象里只是淺拷貝,對象里屬性的屬性還是對原來對象里屬性的屬性的一個(gè)引用,因?yàn)榻鈽?gòu)賦值可以生成一份淺拷貝,其實(shí)我們針對已知結(jié)構(gòu)的對象也可以全部使用這個(gè)方法實(shí)現(xiàn)自己想要的拷貝。比如上例中:
let state = {a: {a1: 1, a2: 2}, b: 2} let state2 = { ...state, a: { ...state.a } }
希望可以幫助大家。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/103650.html
摘要:變量的解構(gòu)賦值結(jié)構(gòu)賦值允許使用默認(rèn)值內(nèi)部使用嚴(yán)格相等運(yùn)算符,判斷一個(gè)位置是否有值。所以,只有當(dāng)一個(gè)數(shù)組成員嚴(yán)格等于,默認(rèn)值才會生效。這樣的層層判斷非常麻煩,因此現(xiàn)在有一個(gè)提案,引入了傳導(dǎo)運(yùn)算符,簡化上面的寫法。 變量的解構(gòu)賦值 結(jié)構(gòu)賦值允許使用默認(rèn)值 let [foo = true] = []; foo // true ES6 內(nèi)部使用嚴(yán)格相等運(yùn)算符(===),判斷一個(gè)位置是否...
摘要:基本原理解構(gòu)是提供的語法糖,其實(shí)內(nèi)在是針對可迭代對象的接口,通過遍歷器按順序獲取對應(yīng)的值進(jìn)行賦值。屬性值返回一個(gè)對象的無參函數(shù),被返回對象符合迭代器協(xié)議。迭代器協(xié)議定義了標(biāo)準(zhǔn)的方式來產(chǎn)生一個(gè)有限或無限序列值。 更多系列文章請看 1、基本語法 1.1、數(shù)組 // 基礎(chǔ)類型解構(gòu) let [a, b, c] = [1, 2, 3] console.log(a, b, c) // 1, 2, ...
摘要:它用來比較兩個(gè)值是否嚴(yán)格相等,與嚴(yán)格比較運(yùn)算符的行為基本一致。兩個(gè)對象的地址不一樣與嚴(yán)格比較運(yùn)算符的不同之處只有兩個(gè)一是不等于,二是等于自身基本用法方法用于對象的合并,將源對象的所有可枚舉屬性,賦值到目標(biāo)對象。 這是ES6的入門篇教程的筆記,網(wǎng)址:鏈接描述,以下內(nèi)容中粗體+斜體表示大標(biāo)題,粗體是小標(biāo)題,還有一些重點(diǎn);斜體表示對于自身,還需要下功夫?qū)W習(xí)的內(nèi)容。這里面有一些自己的見解,所以...
閱讀 3278·2023-04-25 15:44
閱讀 1931·2019-08-30 13:11
閱讀 2926·2019-08-30 11:11
閱讀 3135·2019-08-29 17:21
閱讀 1362·2019-08-29 15:38
閱讀 1016·2019-08-29 12:49
閱讀 1852·2019-08-28 18:19
閱讀 3276·2019-08-26 14:01