解构赋值的使⽤⽅法
ES6允许按照⼀定的模式,从数组和对象中提取值,对变量进⾏赋值,这被称为解构。
var [a,b,c]=[1,2,3];可以从数组中提取值,按照位置的对应关系对变量赋值。本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值就等于undefined。另⼀种情况是不完全解构,即等号左边的模式只匹配等号右边数组的⼀部分。这种情况下,解构依然可以成功。
es6字符串转数组 解构赋值不仅适⽤于var命令,也适⽤于let和const命令。
解构赋值允许指定默认值。ES6内部使⽤严格相等运算符(===)判断⼀个位置是否有值。所以,如果⼀个数组成员不严格等于undefined,默认值是不会⽣效的。如果⼀个数组成员是null,默认值就不会⽣效,因为null不严格等于undefined。
对象的解构与数组有⼀个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;⽽对象的属性没有次序,变量必须与属性同名,才能取到正确的值。如果变量名与属性名不⼀致,必须写成下⾯这样:let {first:f,last:l}={first:'1',last:'2'},f//1,l//2。这实际上说明,对象的解构赋值是以下形式的简写。let {first:first,last:last}={first:'1',last:'2'}.也就是说,对象的解构赋值的内部机制,是先到同名属性,然后再赋给对应的变量。真正被赋值的是后者,⽽不是前者。
解构赋值的变量都会重新声明,假如使⽤var命令不会报错。对象的解构也可以指定默认值。默认值⽣效的条件是,对象的属性值严格等于undefined。
如果解构失败,变量的值等于undefined。
如果解构模式是嵌套的对象,⽽且⼦对象所在的⽗属性不存在,那么将会报错。这是因为⽗属性是undefined,再取⼦属性就会报错。
字符串也可以解构赋值。这是因为,此时字符串被转换成了⼀个类似数组的对象。类似数组的对象都有length属性,因此还可以对这个属性的解构赋值。
解构赋值的规则是,只要等号右边的值不是对象,就先将其转换为对象。由于undefined和null⽆法转为对象,所以对它们进⾏解构赋值都会报错。
函数的参数也可以解构赋值。函数参数的解构也可以使⽤默认值。
function move({x=0,y=0}){
console.log(x+y)
}
move({x:3,y:2})//5
move({x:3})//3
只要有可能,就不要在模式中放置圆括号。
变量声明语句中,模式不能带有圆括号。函数参数中,模式也不能带有圆括号。不能将整个模式或嵌套模式中的⼀层放在圆括号中。 可以使⽤圆括号的情况只有⼀种:赋值语句的⾮模式部分可以使⽤圆括号。
变量的解构赋值⽤途很多。
[x,y]=[y,x];代码交换了变量x和y的值,这个写法⽐⽤中间值来切换好多了。
函数只能返回⼀个值,如果返回多个值,只能将其放在数组或对象中返回。有了解构赋值,取出这些值就很⽅便。return [1,2,3];var [a,b,c]=func();
函数参数的定义。解构赋值可以⽅便地将⼀组参数与变量名对应起来。参数是有序的情况下⽤数组,⽆序的情况下⽤对象。
解构赋值对提取JSON对象中的数据尤其有⽤。
函数参数的默认值。这就避免了在函数体内部再写var foo=config.foo||'default foo';
遍历map结构。for(let [key] of map){}
输⼊模块的指定⽅法。没⽤过。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论