1、问题
在学习es语法的时候被一下的两个函数给弄的迷迷糊糊的。
涉及到函数参数默认值、解构赋值默认值以及解构赋值
// 代码1:
function move({x = 0, y = 0} = {}) {
console.log([x, b]);
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
// 代码2:
function move({x, y} = { x: 0, y: 0 }) {
console.log([x, b]);
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, undefined]
move({}); // [undefined, undefined]
move(); // [0, 0]
2、默认值解释
2.1、函数参数默认值
1、当没有传入参数(包括传入undefined)时,函数取参数(备用的)默认值。
2、当有传出默认值,将会替代默认值。
//直接传参
function move(x=0,y=0){console.log([x,y])}
move() //[0,0]
move(1) //[1,0]
move(1,1) //[1,1]
//解构赋值传值
function move({x, y} = {x: 0, y: 0}) { console.log([x,y]);}
move(); // [0,0] 因为没有传入参数,所以move取默认参数`{x: 0, y: 0}`进行处理
2.2、解构赋值默认值
1、es中是使用
===进行比对的,所以需要严格等于undefined,默认值才生效。
var {x, y = 5, z = 1} = {z = undefined};
x // undefined 解构失败
y // 5 未传值,默认为undefined,使用默认值
z // 1 传值,传的值严格等于undefined,使用默认值
3、传参详解
标准模板:
function move(不同的参数){console.log([x,y])}
| 传入的参数 | 调用 | 结果 | 解释 |
|---|---|---|---|
move(x, y) |
move(1,2) | [1,2] |
原始赋值 |
move(x=0, y=0) |
move() | [0,0] |
函数参数默认值:x=0,y=0解构赋值: 不需要传参: 无 |
move({x,y}) |
move({x:1,y:2}) | [1,2] |
函数参数默认值:无解构赋值默认值: 无传参: {x,y}={x:1,y:2} |
move({x=0,y=0}) |
move({x:1,y:2})move( {x:1})move( {y:2})move( {})move() |
[1,2][1,0][0,2][0,0]报错 |
要解构赋值 解构赋值有默认值 |
move({x=0,y=0}={}) |
move() | [0,0] |
没有传参或者传入undefined时,取值默认为{},解决报错问题 |
move({x=0,y=0}={x:1,y:1}) |
move() | [1,1] |
函数参数默认值:{x:1,y:1}解构赋值默认值: {x=0,y=0} |
4、综合案例
function move({x = 0, y = 0} = { x: 1, y: 1 }) {
console.log([x,y])
}
// 解构赋值的模式 {x, y}
// 解构赋值的默认值 x = 0, y = 0
move({x: 3, y: 8}; // 被解构赋值的参数 : {x: 3, y: 8}
// [3, 8]
move({x: 3}); // 被解构赋值的参数 : {x: 3}
// [3, 0]
move({}); // 被解构赋值的参数 : {}
// [0, 0]
move(); // 被解构赋值的参数 : {x: 1, y: 1}
// [1, 1]
move(undefined); // 被解构赋值的参数 : {x: 1, y: 1}
// [1, 1]