ES系列 | 扩展运算符和rest参数

400 阅读2分钟

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。

ES系列文章

扩展运算符(...)

扩展运算符:把数组或类数组展开成逗号隔开的值

应用:

function foo(a, b, c){
    console.log(a, b, c)
}
let arr = [1, 2, 3]
foo(...arr)
//[1 2 3]

解构赋值:

function foo([a, b, c]){
    console.log(a, b, c)
}
let arr = [1, 2, 3]
foo(arr)
//1 2 3

合并数组:

es5写法:
let arr1 = [1,2,3]
let arr2 = [4,5,6]
Array.prototype.push.apply(arr1, arr2)
console.log(arr1)
//1 2 3 4 5 6

es6写法:
let arr1 = [1,2,3]
let arr2 = [4,5,6]
arr1.push(...arr2)
console.log(arr1)
//1 2 3 4 5 6

字符串

let str = 'hello'
let arr = [...str]
console.log(arr)

rest参数(...)

rest参数:把逗号隔开的值组合成一个数组

arguments的写法:
arguments不是真正意义上的数组,而是一个伪数组。
es5写法:
function foo(x,y,z){
    let sum = 0
    Array.protptype.forEach.call(argunments,function(item){
        sum += item
    })
    return sum
}
console.log(foo(1,2))
console.log(foo(1,2,3))
//3
//6
es6写法:
function foo(x,y,z){
    let sum = 0
    Array.from(arguments).forEach(function(item){
        sum += item
    })
    return sum
}
console.log(foo(1,2))
console.log(foo(1,2,3))
//3
//6
rest的写法:(剩余运算符)
跟前面扩展运输符想法的

function foo(...b) {
    console.log(b)
}
console.log(foo(1,2))
console.log(foo(1,2,3))
//1 2
//1 2 3
注意,rest 参数之后不能再有其他参数,否则会报错。

function foo(...b) {
    console.log(b)
    let sum=0
    b.forEach(function(item){
        sum += item
    })
    return sum
}
console.log(foo(1,2))
console.log(foo(1,2,3))
//1 2
//3
//1 2 3
//6

function foo(x,...b){
   console.log(x)
   console.log(b)
}
foo(1,2,3)
foo(1,2,3,4)
//1 [2,3]
//1 [2,3,4]

let [x, ...b]=[1,2,3]
console.log(x)
console.log(b)
//1 [2,3]

一个前端小白,若文章有错误内容,欢迎大佬指点讨论!