注意参数是对象,并且等号左边是解构后的变量,用等号赋值,右边是参数,也就是正常的变量,所以对象用冒号给值
案例1: 是对解构后的变量给默认值
function move({x = 0, y = 0} = {}) {
return [x, y];
}
//没什么好说的
console.log(move({x: 3, y: 8}));// [3, 8]
//参数直有一个x,所以解构后没有y则使用默认
console.log(move({x: 3}));// [3, 0]
//传递了一个空对象参数,但是解构出来x,y都没有,则使用默认值
console.log(move({}));// [0, 0]
//无参数,会使用参数的默认值也就是{},解析后x,y都没有,则使用默认值
console.log(move());// [0, 0]
案例2: 参数给默认值
function move({x, y} = { x: 0, y: 0 }) {
return [x, y];
}
//没什么好说的
console.log(move({x: 3, y: 8})); // [3, 8]
//传递了一个有x的对象则不使用默认参数{x:0,y:0},但是解构出来后没有y,并且也没有默认值,所以y是undefined
console.log(move({x: 3})); // [3, undefined]
//参数传递了一个空对象,不使用默认参数。但是没有解构出x,y 。都为undefined
console.log(move({})); // [undefined, undefined]
//没有传递参数,所以使用默认参数{x:0,y:0}。 都能解构出来,所以都为0
console.log(move()); // [0, 0]