亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

三點運算符到底做了什么?

三點運算符到底做了什么?

SMILET 2019-03-15 22:15:27
const obj7 = {a: {b: 1}};const obj8= { ...obj7 } obj7.a.b = 7console.log(obj7.a.b, obj8.a.b)// 7 7const obj9 = {a: 1};const obj10= { ...obj9 } obj10.a = 7console.log(obj9.a, obj10.a)// 1 7老哥們有點不懂 為什么第二段代碼是淺復制? 還有第一段和第二段為什么不一樣?我好像看文檔錯過了什么 但是找不到解釋。。。求大佬打醒我。----------分割線----------上面的 我懂了 但是這個三點運算符 做了什么? 和 var = 有什么區別?const obj3 = {a: 1};var obj4 = obj3obj3.a = 3;console.log(obj3.a,obj4.a)// 3 3const obj9 = {a: 1};const obj10= { ...obj9 } obj10.a = 7console.log(obj9.a, obj10.a)// 1 7
查看完整描述

4 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

無論是...還是assign都是淺拷貝,什么是淺拷貝,顧名思義就是只拷貝第一層屬性,如果第一層屬性的值為一個引用類型的數據,那么復制的就是這個數據的地址,也就是并沒有把數據本身拷貝過來,只是說我記住你了,有事我再找你。

第一個例子中a屬性是一個對象,拷貝過來后改變這個數據的值,那么就相當于改變了原數據

第二個例子中a屬性是一個namber類型的值,不是引用類型的,所以直接拷貝過來,改變值后,源對象不會跟著改變


...是ES6新出現的一種運算符,名為解構。詳細的可以看阮一峰老師的ECMAScript 6 入門

顧名思義就是分解一個數據的結構,那么什么數據可以被分解?
所有可被遍歷的數據(具有Iterator 接口的對象),如對象、數組、Map、Set、argument,另外字符串也可以結構(某種意義上字符串可以理解為數組)。

結構一個數據后得到了什么?
這就要講到數據的遍歷了,你可以把結構理解為遍歷取值,可是也不是什么值都取的。就拿object來說,使用for...in來遍歷,得到的是所有可枚舉的共有的屬性,而使用結構來結構一個對象,得到的是所有可枚舉的私有的屬性,這點要知道。

結構最常用的兩個地方,一是結構賦值,一是結構復制。其基本原理都是遍歷取值。


查看完整回答
反對 回復 2019-04-08
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

origin = {

    name: "James",

    hello: "World",

    child: {}

};


const a = origin;

const b = { ...origin };


console.log(a === origin, a);

console.log(b === origin, b);

console.log(b.child === origin.child);

true { name: 'James', hello: 'World', child: {} }

false { name: 'James', hello: 'World', child: {} }

true

所以擴展運算符干了什么——淺復制(最后那個 true 輸出說明了 child 未被復制)


查看完整回答
反對 回復 2019-04-08
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

擴展運算符(spread)
引用類型與值類型

查看完整回答
反對 回復 2019-04-08
  • 4 回答
  • 0 關注
  • 449 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號