美文网首页
ES6中的解构赋值入门

ES6中的解构赋值入门

作者: QDzzzhy | 来源:发表于2019-03-17 00:00 被阅读0次

数组的解构赋值:

  • let [a,b,c]=[1,2,3]; ==>let a=1;let b=2;let c=3;

  • let [head,...tail]=[1,2,3,4]; ==> head = 1 , tail = [2,3,4]

  • let [x,y,...z]=['a']; ==> x = "a" y=undefined z=[]

  • 分析:因为解构赋值是依次对应的,x对应"a",y没有对应值,为undefined,...z表示剩余内容,剩余为空,因此为空数组[]

  • let [a,[b],d]=[1,[2,3],4]; a==>1,b==>2,d==>4

  • 分析:a和d不必哆嗦,[b]=[2,3],解构赋值,b=2;3没有对应值,忽略

  • ...运算符两种用法:

  • 展开运算符(用在array和object上):let a = [1,2,3]; let b = [0,...a,4]; ==>[0,1,2,3,4]

  • 剩余操作符(结构的一种,一般只针对array),举例就是上面的。解构不成功,变量的值就是undefined。如果等号右边不是数组或不可遍历,会报错。比如:

  • let [foo]=1; let [foo]=false; let [foo]=NaN; let [foo]=undefined; let [foo]=null; let [foo]={};这些等号右边的值都不可遍历,因此都会报错

  • 解构允许赋默认值: let [x,y = 'b']=['a',undefined]; x==>'a',y==>'b'

  • 如果数组成员不严格为undefined,默认值不会生效:let [x,y = 'b']=['a',null]; x==>'a',y==>null

对象的解构赋值:

  • 对象的解构赋值是按名称对应来的,名称不对应值就为undefined。而数组是按次序排列的

  • let [bar,foo]={foo:"aaa",bar:"bbb"}; ==>foo:aaa,bar:bbb

  • 对象的解构赋值是下面形式的简写:let {foo:foo,bar:bar}={foo:'aaa',bar:'bbb'}

  • var {foo:baz}={foo:'aaa',bar:'bbb'}; ==>baz:aaa

  • foo称为模式,baz称为变量

  • let {foo:baz}={foo:'aaa',bar:'bbb'}; ==>baz:aaa,foo:foo is not defined

  • 对象的解构也可以赋默认值:var {x:y=3}={x:5}; ==> y:5

  • 默认值生效的条件也是对象的属性值严格等于undefined

  • 已经声明的变量不能用于解构赋值:let x; {x}={x:1}; ==>报错。因为这里JavaScript引擎会将{x}解析为代码块,通过({x}={x:1}); 则能正确解析

  • 解构赋值左边可以不放任何东西

  • 字符串也可以解构赋值,类似数组的对象都有length属性,也可以对其解构赋值:let {length:len}='hello'; ==> len:5

  • 解构赋值时,如果等号右边是数值和布尔值,则会先转为对象

  • let {prop:x}=undefined; ==>TypeError undefined和Null不能转化为对象

  • let {prop:x}=null; ==>TypeError

  • 注意:模式不能使用圆括号

解构赋值的用途

  • 交换变量的值:let x=1; let y=2; [x,y]=[y,x];

  • 从函数返回多个值:

    function example(){

      return [1,2,3];

    }

    let [a,b,c]=example(); //返回数组

    function example(){

      return {foo:1,bar:2};

    }

    let {foo,bar}=example();  //返回对象
  • 函数参数的定义:
functoin f([x,y,z]){

...

}

f([1,2,3]); //有次序的参数

function f({x,y,z}){

...

}

f({z:3,y:2,x:1});  //无次序的参数
  • 提取json数据:
  let jsonData={

id:42,

  status:"ok",

  data:[132,456]

  };

  let {id,status,data}=jsonData;
  • 函数参数的默认值:
jQuery.ajax=function(url,{

async=true,

beforeSend=function(){},

cache=true}){...}

- 遍历Map结构:

var map=new Map();

map.set('first','hello');

map.set('second','world');

for (let [key,value] of map){

console.log(key,value)

}

for (let [key] of map){

console.log(key)

}

for (let [,value] of map){

console.log(key)

}
  • 输入模块的指定方法:
const { SourceMapConsumer, SourceNode } = require("source-map");

最后注意一点:解构赋值的参数必须在最右边

例如:

const [a,...b]=[1,2,3,4]能正确解构,而const [...a,b]=[1,2,3,4]会报错,如果是三个参数,const [a,...b,...c]=[1,2,3,4]也是错误的

相关文章

网友评论

      本文标题:ES6中的解构赋值入门

      本文链接:https://www.haomeiwen.com/subject/xtfymqtx.html