图片引用阮一峰es6教程
对图片中例子的理解:
function move( {x=0,y=0}={} ) {return[x,y];}
上面代码 {x=0,y=0}={}
表示对象的解构赋值,并且解构赋值的默认值为x=0,y=0;
等号右边的空对象{}表示解构赋值中的值,等号左边的{x=0,y=0}
表示解构赋值中的变量。但是由于值为空对象,相当于里面为undefined,所以如果只有{x=0,y=0}={}
的话,赋值的结果是x=0,y=0
的。
但是由于函数可以传参数,所以move( {x:3,y:8} )
,就相当于在function里面这样的表示:
{x=0,y=0} = {x:3,y:8}
对象的解构赋值右边对象有值了,不再是空对象了,也就是说对象里面不再是undefined了,那么解构赋值中就不能使用默认值x=0,y=0了,所以赋值的结果是x=3,y=8.
在move( {x:3,y:8} )
中我们称{x:3,y:8}
为参数,而称move的定义函数
function move( {x=0,y=0}={} ) {return[x,y];}
中等号右边的空对象为参数赋值的默认值,也就是说{}是move函数参数的默认值,如果move函数不传参,那么对象解构的时候是按照{x=0,y=0}={}
来解构的。如果函数传参obj,则按照{x=0,y=0}=obj
来解构。
补充一点,
function move( {x=0,y=0}={} ) {return[x,y];}
里面,{x=0,y=0}={}
中={}
不能去掉,因为{x=0,y=0}
是一个对象,如果使用move
函数的时候不传参,即move()
,那么就意味着{x=0,y=0} = undefined
了,这样就会报错。也就是函数参数的默认值不能省略。
这篇文章的目的是为了区分 解构赋值默认值{x=0,y=0}
和 参数默认值的不同。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。