扩展运算符

2019-03-22  本文已影响0人  hhh_hhhhhh

扩展运算符是三个点(...)。个人认为是对于数组操作的简化版。(千万不要因为漏打一个点报错啊!!)

简化apply方法

一、展开数组

function doSth(a,b,c){
    return a+b+c
}

这里我们传参一般为

doSth(1,2,3)    //6。

参数为数组let arr = [1,2,3],那么可能我们要手动展开传参,但扩展运算符可以简化这部操作。

doSth(...[1,2,3])    //6

或者

doSth(...arr)    //6    (后面就不展示这种方式了!)

二、取最大值

Math.max.apply(null,[11,5,20])    //20

Math.max(...[11,5,20])    //20

Math.max(11,5,20)    //20

扩展运算符就是展开数组成为参数序列。

三、push一个数组到另一数组尾部

let arr1 = [1,2]
let arr2 = [3,4]
Array.prototype.push.apply(arr1,arr2)    //[1,2,3,4]

//用到扩展运算符:

arr1.push(...arr2)    //[1,2,3,4]

是不是方便到家!(前者是因为ES5中push参数无法是数组)

四、复制数组

数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。

let arr1 = [1,2]
let arr2 = arr1
arr2[0] = 2
arr1    //[2, 2]

我们改变了arr2,arr1也改变了。说明arr2并不是arr1的克隆,而是指向同一份数据的另一个指针。修改arr2,会直接导致arr1的变化。我们可以这样:

let arr1 = [1,2]
let arr2 = arr1.concat()
arr2[0] = 2
arr1    //[1, 2]

这样就不会影响arr1了。我们用扩展运算符呢?

let arr1 = [1,2]
let arr2 = [...arr1]

//或

let [...arr2] = arr1

两种写法都可以。

五、合并数组

let arr1 = [0,1,2]
let arr2 = [3,4,5]
let arr3 = [6,7,8]
arr1.concat(arr2,arr3)    //[0,1,2,3,4,5,6,7,8]

//扩展运算符:

[...arr1,...arr2,...arr3]    //[0,1,2,3,4,5,6,7,8]

以上两种方法都是浅拷贝,修改一个数组中的值都会影响合并数组中的值。

权威参考ES6:http://es6.ruanyifeng.com/?search=%E6%89%A9%E5%B1%95%E8%BF%90%E7%AE%97%E7%AC%A6&x=0&y=0#docs/array

上一篇 下一篇

猜你喜欢

热点阅读