代码:
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的默认值时一个具体的属性,但没有设置解构时的默认值
本文探讨了ES6中函数参数解构赋值的默认值行为。通过示例代码,解释了m1如何在未传入参数时使用解构赋值的默认值,等价于为x和y分别赋值1。而m2在无参数传递时,其默认值是一个空对象。总结指出m1设定了解构赋值的默认值,而m2仅设定了函数参数的默认值。
1274

被折叠的 条评论
为什么被折叠?



