ES6-解构赋值

变量的解构赋值

解构的默认值

let [foo=true]=[]
console.log(foo)//true

let [a,b="JSPang"]=['技术胖']
console.log(a+b); //控制台显示“技术胖JSPang”

undefined不会赋值

let [a,b="JSPang"]=['技术胖',undefined];
console.log(a+b); //控制台显示“技术胖JSPang”

null会赋值

let [a,b="JSPang"]=['技术胖',null];
console.log(a+b); //控制台显示“技术胖null”

对象的解构赋值

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined

上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo

这时p是模式,不是变量,因此不会被赋值。如果p也要作为变量赋值,可以写成下面这样,把p单独写出来:

let obj = {
  p: [
    'Hello',
    { y: 'World' }
  ]
};

let { p, p: [x, { y }] } = obj;
x // "Hello"
y // "World"
p // ["Hello", {y: "World"}]

字符串的解构赋值

字符串被转换成类似数组的对象

const [a,b,c,d,e]='hello'
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

对属性解构赋值

let {length:len}='hello'
len//5

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对他们进行解构赋值会报错:

let {prop:x}=undefined
let {prop:y}=null

圆括号的使用

赋值语句的非模式部分,可以使用圆括号

[(b)]=[3]
({p:(d)}={})

在解构之前就定义了变量:

let foo
({foo}={foo:'JSPang'})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.数组的解构赋值 2.对象的解构赋值 3.字符串的解构赋值 4.数值和布尔值的解构赋值 5.函数参数的解构赋值 ...
    卞卞村长L阅读 922评论 0 0
  • 1.在指定默认值时,赋值为<code>null</code>和<code>undefined</code>是不同的...
    请输入其他名字阅读 1,762评论 0 0
  • 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring...
    嘉奇呦_nice阅读 791评论 0 2
  • 前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段。在ES6中添加了可以简化这种任务的新特性...
    sunnyghx阅读 767评论 0 0
  • 解构赋值注意 : 1. 左右两边结构必须一样; 2. 右边必须是一个东西; 3. 声明和赋值不能够分开(必须在一...
    海之深处爱之港湾阅读 170评论 0 2