ES6-参数处理

2020-03-13  本文已影响0人  zhenghongmo

默认参数值

function sum(a=0,b=0){
    return a+b    
}
sum()   //0+0=0
function fn(a=1,b=2){
    console.log(a,b)
}
fn(undefined,null) //1,null
function append(value, array = []) {
  array.push(value);
  return array;
}

append(1); //[1]
append(2); //[2], 1不会保留在里面,再次解析array为[],所以返回的不是[1,2]
function fn(x=1,y){
    return[x,y]
}

fn()   //[1,undefined]

剩余参数

语法

function (a,b,...args){

}

如果函数的最后一个命名参数以...为前缀,则它将成为一个由剩余参数组成的<font color="red">真数组</font>

上面例子中args将收集该函数的第三个参数(因为第一个参数被映射到a,而第二个参数映射到b)和所有后续参数。

剩余参数和arguments对象的区别

arguments从伪数组变成真数组

  1. let args = Array.prototype.slice.call(arguments)

  2. let args = Array.from(arguments)

  3. let args = [...arguments]

展开运算符

在函数调用时使用展开语法

funtion fn(x,y,z){

}
let args = [1,2,3];
fn.apply(null,args);
//等价于
fn(...args)

构造字面量数组时使用展开语法

var array1 = [1,2,3,4,5,6]
var [,,,...array2]=array1  //array2=[4,5,6]
var arr3=[0,...array1,7]   //array3=[1,2,3,4,5,6,7]

构造字面量对象时使用展开语法

var obj1 = {name: 'leo',age: 14}
var obj2 = {name:'tom', x:26}
var obj3 = {...obj1}   //{name: 'leo',age: 14}
var obj4={...obj1,...obj2}    //{name:'tom',age: 14 ,x:26}
//由于先传入obj1,再传入obj2,所以obj2会覆盖与obj1中相同的部分
上一篇 下一篇

猜你喜欢

热点阅读