美文网首页
ES6-解构

ES6-解构

作者: 吴高亮 | 来源:发表于2018-12-20 21:13 被阅读0次

ES6允许按照一定的模式,从数组和对象中提取值;对变量进行赋值;这被称为解构(Destructuring);
let [a,b,c]=[1,2,3];可以使用这个方式进行赋值;

本质上,这种写法属于模式匹配;只要等号两边的模式相等;左边的变量就会被赋予相应的值
如果解构不成功;变量的值就是undefined;
let [foo]=[];
let [bar,foo]=[1];
以上的foo的值都会等于undefined;

关于Set结构,也可以使用Set的结构;
let [a,b,c]=new Set(['x','y','c']);
x;//'a';
事实上;只要某种数据结构具有Iterator接口;都可以采用数据形式的解构赋值;

function* fibs(){
 let a=0;
 let b=1;
 while(true){
   yield a;
  [a,b]=[b,a+b];
 }
}
let [first,second,third,fourth,fifth,sixth]=fibs();

在解构的每一个值中都可以填写默认值

  • 对象的结构赋值
    结构不仅可以用于数组,还可以用于对象;
let {foo,bar}={foo:'aaa',bar:'bbb'};
foo//'aaa';
bar//'bbb';
上面的写法可以不按先后顺序;结构会按照属性以及属性名称进行匹配;
类如
let {bar,foo}={foo:'aaa',bar:'bbb'};
这样还是相同的结果;
bar//bbb;
foo//aaa;
如果中间写了不存在的属性;例如写了
let {x}={y:'bbb'};
其实这个时候x//undefined
  • 字符串的解构赋值;
    const [a,b,c,d,e]='hello';这个最终结果是 a //h;b //'e';c //'l';d //'l';e //'o';;

  • 函数参数的解构赋值

function add([x,y]){
  return x+y;
};
add([1,2]);
上面代码中函数add的参数
来着比较常用;
function move({x=0,y=0}={}){
 return [x,y]
};
move({x:3,y:8});//[3,8];
move({x:3});//[3,0];
move({});//[0,0];
move();//[0,0];
  • 说到重点就是用途;
    解构用途很多;
    (1)交换变量的值
let x=1;
let y=2;
[x,y]=[y,x];
上面代码交换变量下x,y;,这样的写法简洁易懂;

(2)从函数返回多个值
函数只能返回一个值;如果想要返回多个值,只能将他们放在数组或者对象里面返回,有了解构赋值,取出这些就非常方便了

// 返回一个数组

function example() {
  return [1, 2, 3];
}
let [a, b, c] = example();

// 返回一个对象

function example() {
  return {
    foo: 1,
    bar: 2
  };
}
let { foo, bar } = example();

(3)函数参数的定义;
解构赋值可以很方便的将一组参数和变量名对应起来;

function f([x,y,z]){};
f([1,2,3]);
//参数是一组序的值;
function f({x,y,x}){}
f({z:3,y:2,x:1});

(4) 提取JSON的数据;
解构赋值对提取JSON对象中的数据,尤其有用;

let jsonData={
 id:42,
status:'ok',
data:[867,5309]
};
let {id,status,data:number}=jsonData;
console.log(id,status,number);
//42,'OK',[867,5309];
上面代码可以快速的提取JSON;

(5)函数的默认参数;

jQuery.ajax = function (url, {
  async = true,
  beforeSend = function () {},
  cache = true,
  complete = function () {},
  crossDomain = false,
  global = true,
  // ... more config
} = {}) {
  // ... do stuff
};
指定了参数额默认值;就避了函数内部再写 `var foo=config.foo||'default foo';`这样的语句;

(6)遍历Map结构;
任何部署了Iterator接口的对象;都可以用for...of循环遍历。Map结构原生支持Iterator接口;获取键名和键值;

const map=new Map();
map.set('first','hello');
map.set('second','world');
for(let [key,value] of map){
  console.log(key+"is"+value)
};
//first is hello
//second is world;
如果只是想要获取键名;或者只是想获取键值可以写成如下
//获取键名
for(let [key] of map){
//。。。
}
//获取键值
for(let [,value] of map){
 //...
}

(7) 输入模块的指定方法;
加载模块时;往往需要指定输入那些方法。解构赋值使得输入语句非常清晰;

const {SourceMapConsumer,SourceNode}=require('source-map');

相关文章

  • ES6-解构

    一、 解构数组 解构是 ES6 里面定义的一种新的语法,意思就是分解一个东西的结构。 把一个数组里的不同的值分别...

  • ES6-解构

    ES6允许按照一定的模式,从数组和对象中提取值;对变量进行赋值;这被称为解构(Destructuring);let...

  • es6-解构赋值

    什么是解构赋值 左右一一对应进行赋值。 解构赋值的分类 数组解构赋值,左右都是数组 对象解构赋值,左右都是对象 字...

  • ES6-解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 要点: 1、左右两边结构必须一样;2...

  • ES6-解构赋值

    语法 可以将值从数组或属性从对象提取到不同的变量中。 表达式左边定义了要从原变量中取出什么变量。 解构数组 数组解...

  • ES6-解构赋值

    ES6为对象和数组提供了解构功能,允许按照一定模式从对象和数组中提取值,并对变量进行赋值。 对象解构对象解构的语法...

  • ES6-对象解构与数组解构

    1.对象解构 2.数组解构

  • 2019-01-24

    ES6-之 filter

  • ES6-变量的解构赋值

    1,什么是解构?为什么要使用解构? ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。...

  • ES6-解构赋值的用途

    交换变量的值: 从函数返回多个值: 案例二: 函数参数的定义: 提取Json数据: 函数参数的默认值: 遍历Map...

网友评论

      本文标题:ES6-解构

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