解构赋值
先记住一点,无论是数组的解构赋值还是对象的解构赋值,根本是赋值操作;
- 数组的解构赋值根据变量的位置对应赋值
- 对象的解构赋值根据匹配的模式进行赋值
- 解构赋值必须符合语法
|
|
解构可以避免在对象赋值时产生中间变量:
1 数组的解构赋值(解构赋值的时候,必须符合解构赋值的格式,数据必须是可迭代的结构)
数组的元素是按次序排列的,变量的取值由它的位置决定
|
|
如果左边变量多余右边值,多余的变量将被赋值为undefined
|
|
如果左边变量少于右边值,右边多余的值将会被忽略
|
|
“链式”赋值:其实核心还是 赋值运算符的运算过程: 返回 = 右边的运算数,从右向左进行运算
|
|
变量值的”优先级”: 右边undefined < 左边默认值 < 右边除了undefined之外的其他值
|
|
解构赋值的原理:
|
|
看下var声明
|
|
|
|
2 对象的解构赋值
对象的属性没有次序,变量必须与属性同名,才能取到正确的值
对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者
|
|
如果匹配不到对应的属性名,那么将会被赋值为undefined
|
|
|
|
对象的解构赋值,根本是给属性的属性值进行的赋值
|
|
|
|
从上面两段代码可以看出来,其实对象的解构赋值,
- 根本还是对象的属性的简洁语法表示
- 解构赋值是先进行变量的声明
|
|
如果是采用以下赋值形式{ } 必须用( ) 括起来,否则浏览器会认为那是一个代码块,会报错
|
|
为了说明对象的解构赋值的匹配模式的,看下面的代码
|
|
体会下下面的两段代码
|
|
|
|
对象的解构赋值是可以嵌套的,同样对于匹配模式(属性名)还是要有深刻的认识
|
|
undefined再取属性的时候会报错
|
|
如果解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错。
|
|