代码:
const m1=({ x=1 , y=1 }= { } )=>
console.log(x+" "+y);
const m2=({ x , y } = { x:1 , y:1 } )=>
console.log(x+" "+y);
以上两段表达式的区别?
- m1是默认了一个解构赋值, m2是给函数设置了一个默认值是两个属性。
写法
m1( ); // log:1 1
m2( ); //log:1 1
- m1在在没有传入参数时,程序进行解构赋值,给参数设定默认值的,等同于代码:
const {x=1,y=1}={}
- 因为在解构的时候没有给赋值,故而程序解析使用默认值x=1,y=1
- m2在没有传入参数时,程序进行解析时,等同于代码:
const test={
x:1,
y:1
}
const {x,y}=test;
写法2
m1( {} )// log:1 1
m2( {} )//log: undefined undefined
- m1: 和上面相同
- m2: 对参数进行了赋值,但赋值的是一个空对象;
- 代码:
let x,y; console.log(x,y);// undefined undefined;
- 相当于对变量进行初始化没有赋值,所以是undefined;
结论:
- m1的默认值是一个空对象,但设置了解构时的默认值
- m2的默认值时一个具体的属性,但没有设置解构时的默认值