ES函数解构赋值

1,808 阅读2分钟

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]