ES6 spread operator 跟 push 的差別

如題目,

假如

a = [...a, b]

與

a.push(b)

有何差別?

阅读 3.2k
5 个回答

你操作单个元素当然没问题了
正如他的字面意思,展开操作符,是作用于数组或者对象等包含多个元素的集合
假如换个场景
a = [1,2,3]
b = [4,5,6]
a = [1,2,3,...b]
a = a.push(b)
差别是不是很大了

新手上路,请多包涵

图片描述

babel下是这样,你应该很快就明白了

前面的都没说错,其实根子上的区别在于:

array spread operator返回的是一个新的数组,而push是改变的元素组,并没有返回新值

  1. F12或者Cmd+Alt+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. 为什么? 这就牵扯到引用类型深拷贝和浅拷贝的问题了,建议题主好好补补基础

a = [1, ...a, 3]
不是比
a.unshift(1)
a.push(3)
直观易懂得多
你用数组方法当然可以实现一部分...的功能
但是...使得代码更加易懂
而且...还有更多的功能,它的本质功能是展开
spread operator

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题