首页 > 代码库 > 《深入理解ES6》之解构

《深入理解ES6》之解构

结构是一种打破数据解构,将其拆分为更小部分的过程。

对象解构

  对象字面量的语法形式是在一个赋值操作符左边放置一个对象字面量。

let node={    type:"indefine",    name:"foo"};let{type,name}=node;console.log(type);//indefineconsole.log(type);//foo

解构赋值

  可以在定义变量之后想要修改它们的值。

let node={    type:"indefine",    name:"foo"},type="literal",name=5;({type,name}=node);console.log(type);//indefineconsole.log(type);//foo

  一定要用一对小括号包裹解构赋值语句,JavaScript引擎讲一对开放的花括号视为一个代码块,而语法规定,代码块语句不允许出现在赋值语句左侧,添加小括号后可以将快语句转化为一个表达式,从而实现整个解构赋值的过程。

默认值

  当指定的属性不存在,这个局部变量会被赋值为undefined,也可以随意定义一个默认值,在属性名称后面添加一个等号和相应的默认值。

let node={    type:"indefine",    name:"foo"}let{type,name,value=true,age}=node;console.log(type);//indefieconsole.log(type);//fooconsole.log(value);//trueconsole.log(age);//undefined

为非同名局部变量赋值

  使用解构赋值来声明变量localType和localName,这两个变量分别包含node.type和node.name属性的值。

let node={    type:"indefine",    name:"foo"}let{type:localType,name:localName,age=4}=node;console.log(localType);//indefieconsole.log(localName);//fooconsole.log(age);//4

嵌套对象解构

    let node={        type:"indefine",        name:"foo",        loc:{            start:{                line:1,                column:2            },            end:{                line:1,                column:4            }        }    };    let{loc:{start:localStart}}=node;    console.log(localStart.line);//1    console.log(localStart.column);//2  

  解构模式可以应用于任意层级深度的对象,且每一层都具有同等的功能。

数组解构

  解构赋值,数组解构可以赋值上下文,但不需要用小括号包裹表达式。

let colors=["red","green","blue"],    firstColor="black",    secondColor="purple";[firstColor,secondColor]=colors;console.log(firstColor);//red

  数组解构可以交换两个变量的值。

let a=1,b=2;[a,b]=[b,a];
console.log(a);
//2console.log(b);//1

  嵌套数组解构与嵌套对象解构的语法类似。

let colors=["red",["green","ligntgreen"],"blue"];let [firstColor,[secondColor]]=colors;console.log(firstColor);//redconsole.log(secondColor);//green

  可以讲不定元素应用到数组解构中。可以将数组中的其余元素赋值给一个特定的变量,也可以实现数组复制的功能。

let colors=["red","green","blue"];let[firstColor,...restColor]=colors;console.log(firstColor);//redconsole.log(restColor[0]);//greenvar fruits=["apple","bannan"];[...cloneF]=fruits;console.log(cloneF);//[apple,bannan]

 

《深入理解ES6》之解构