function fn(x, y = 2, z = 3) {
console.log([x, y, z]);
}
fn(1, , 10) // 报错
前面我们知道,可以通过传入对象的这种方式去避免参数顺序的限制...([x, y, z]);
}
fn({}); // 输出 [undefined, 2, 3]
fn({ x: 1, z: 10 }); // 输出 [1, 2, 10]
在这个例子中,使用的只是对象的解构赋值默认值...同样的,你可以利用参数默认值的语法,给 {x, y = 2, z = 3} 设置一个默认的解构对象,使得不传参函数也能够顺利执行:
function fn({ x, y = 2, z = 3 } = {...} else if ( 实参 === undefined ){ // 当 fn();
{ x, y = 2, z = 3 } = {};
}
双重默认值有一点细节需要特别注意,就是解构赋值默认值和函数参数默认值的差别...那么函数返回值就是数值 0 和数组 [1, 2, 3, 4]相加的结果了,两者各自进行了类型的隐式转换变成字符串,然后再相加,是一个字符串拼接的效果。