最近浏览博客看到一个 es6 函数解构赋值的例子
function move({x = 0,y = 0} = { }){
return [x,y];
}
console.log(move({x : 3,y : 4})); //[3,4]
console.log(move({x : 3})); //[3,0]
console.log(move({})); //[0,0]
console.log(move()); //[0,0]
function move2({x,y} = {x : 1, y : 2 }){
return [x,y];
}
console.log(move2({x : 6,y : 8})); //[6,8]
console.log(move2({})); //[undefined,undefined]
console.log(move2()); //[1,2]
一直没怎么看明白,原来博主解释也没怎么看懂
ps: 原博客 https://blog.csdn.net/qq_36846234/article/details/78973402
下面来点通俗易懂的解释:
对于第一个函数
function move({x = 0,y = 0} = { }){
return [x,y];
}
console.log(move({x : 3,y : 4})); //[3,4]
console.log(move({x : 3})); //[3,0]
console.log(move({})); //[0,0]
console.log(move()); //[0,0]
// 分析:
//1、先来看一下 {x = 0,y = 0} = { },只要调用 move 函数 没有传递参数的时候才会执行{x = 0,y = 0} = { } 这一行代码,只要传递了参数 这行代码是不会执行,所以前面两个输出就很好理解了
//2、接下来,第三个输出,传入的参数是一个空 {},是不执行 {x = 0,y = 0} = { }这行的输出[0,0]的原因是,es6 会解构传入的 空 {},发现并没有 X和Y 所以解构失败,使用了默认值
// 第四个输出:根本就没有传入参数,所以执行了 {x = 0,y = 0} = { },得到的结果是 [0, 0]
对于第二个函数:
function move2({x,y} = {x : 1, y : 2 }){
return [x,y];
}
console.log(move2({x : 6,y : 8})); //[6,8]
console.log(move2({})); //[undefined,undefined]
console.log(move2()); //[1,2]
// 1、第一个输出,传入了{x : 6,y : 8}对象,es6会解构这个对象即:let {x,y} = {x:6, y:8},得到的是6,8
// 2、第二个输出,传入的一个空的 {},es6也是会解构这个对象即:let {x,y} = {},因为是空对象,所以会解构失败,使用默认值(并不会执行{x,y} = {x : 1, y : 2 },因为我们传入了参数,只不过这个参数是空{} ),默认值两个都是 underfined ,所以输出的 就是 [undefined,undefined]
// 3、第三个输出,咱们根本就没有传入任何参数,代码就会执行 {x,y} = {x : 1, y : 2 },解构之后的得到的就是 1,2 了