鍍金池/ 問(wèn)答/HTML/ ES6 spread operator 跟 push 的差別

ES6 spread operator 跟 push 的差別

如題目,

假如

a = [...a, b]

與

a.push(b)

有何差別?

回答
編輯回答
荒城
  1. F12或者Cmd+Alt+i打開(kāi)瀏覽器控制臺(tái)
  2. 在console里輸入以下代碼
var a = [1, 2]
var b = a
a.push(3)
console.log(b)

輸出[1,2,3]
3.刷新瀏覽器 在console里輸入以下代碼

var a = [1, 2]
var b = a
a = [...a, 3]
console.log(b)

輸出[1,2]

  1. 為什么? 這就牽扯到引用類型深拷貝和淺拷貝的問(wèn)題了,建議題主好好補(bǔ)補(bǔ)基礎(chǔ)
2018年3月4日 04:16
編輯回答
兮顏

圖片描述

babel下是這樣,你應(yīng)該很快就明白了

2017年7月6日 14:20
編輯回答
陌離殤

a = [1, ...a, 3]
不是比
a.unshift(1)
a.push(3)
直觀易懂得多
你用數(shù)組方法當(dāng)然可以實(shí)現(xiàn)一部分...的功能
但是...使得代碼更加易懂
而且...還有更多的功能,它的本質(zhì)功能是展開(kāi)
spread operator

2018年8月14日 11:45
編輯回答
有點(diǎn)壞

你操作單個(gè)元素當(dāng)然沒(méi)問(wèn)題了
正如他的字面意思,展開(kāi)操作符,是作用于數(shù)組或者對(duì)象等包含多個(gè)元素的集合
假如換個(gè)場(chǎng)景
a = [1,2,3]
b = [4,5,6]
a = [1,2,3,...b]
a = a.push(b)
差別是不是很大了

2018年9月22日 12:56
編輯回答
空痕

前面的都沒(méi)說(shuō)錯(cuò),其實(shí)根子上的區(qū)別在于:

array spread operator返回的是一個(gè)新的數(shù)組,而push是改變的元素組,并沒(méi)有返回新值

2017年11月21日 05:22