• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > es6 Destructuring(解构)

es6 Destructuring(解构)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-12-27

通过本文主要向大家介绍了es6,解构赋值,Destructur等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

一、解构赋值

1. 基本示例

//ES5
var a=1,
    b=2,
    c=3;

//ES6 数组
let [a,b,c]=[1,2,3];

/*es6 对象
*对象解构赋值时需注意
*被赋值的部分也是个复杂对象时,取值需使用冒号后边那个值
*/
let {name,age,id}={name:'cursor',age:19,id:'vc6dfuoc91vpdfoi87s'};
console.log(name);  //cursor
console.log(age);   //19
console.log(id);    //vc6dfuoc91vpdfoi87s

let {type:tipType,min:minNumber}={type:'message',min:20};
console.log(tipType);   //message
console.log(minNumber); //20
console.log(type)   //VM626:1 Uncaught ReferenceError: type is not defined

2. 嵌套解构

保证解析对象与赋值对象结构一致即可。

示例如下

let [age, [{name: fname}]] = [20, [{
    name: 'qc'
}]];


console.log(age); //20
console.log(fname); //qc

3. 不完全解构

等号左边的模式,只匹配一部分等号右边的数组或对象。

let [name,[age,[fname],[lname]],email]=['steven',[20,['qc'],[]]];
console.log(name);  //steven
console.log(age);   //20
console.log(fname); //qc
console.log(lname); //undefined
console.log(email); //undefined
坑点注意:
  1. 当使用let给一些属性进行解构赋值,即便某个值对应位置为空(得到结果为undefined),也不能通过let再次赋值。
  2. 当进行解构赋值时尽量保证结构一致,当等号右边的部分无法构造出等号左边的的解构,会提示迭代器错误,深入了解请看如下代码:
//因为lname外层是一个数组,而右边的表达式无法解析出对应解构便会报错
let [name,[age,[fname],[lname]],email]=['steven',[20,['qc']]];

//报错信息
VM57:1 Uncaught TypeError: ["steven",[20,["qc"]]] is not iterable
    at <anonymous>:1:40

4.解构赋值的默认值

在给对象或者与元素赋值时,可给被赋值的对象设置一个默认值,当被复制对象无法通过解构赋值取到值时会被赋予默认值。

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

let [temp="string"] = ["tempString"];
console.log(temp); //tempString

let [head, ...other] = [0,1,2,3,4,5,6,7,8,9,10];
console.log(head);  //0
console.log(other); //[1,2,3,4,5,6,7,8,9,10];

let {message: msg="Just do it!"} = {};
console.log(msg);   //Just do it!

let {color='yellow'} = {color: null}
console.log(color); //null

let {sin,cos,tan,log}=Math;
console.log(Math.sin===sin);    //true
console.log(Math.cos===cos);    //true
console.log(Math.tan===tan);    //true
console.log(Math.log===log);    //true

5.字符串解构

const [a,b,c,d,e,f]="hello";
console.log(a); //h
console.log(b); //e
console.log(c); //l
console.log(d); //l
console.log(e); //o
console.log(f); //undefined

字符串在使用解构赋值时有个隐藏属性length

const {length:len}="interesting";
console.log(len);   //11

const {length}="Hello world!";
console.log(length);

6.函数参数解构

function({x,y}={x:0,y:0}){
    return [x,y];
}

console.log(fun({x:100,y:200})); //[100,200];
console.log(fun({x:100})); //[100,undefined]
console.log(fun({})); //[undefined,undefined]
console.log(fun()); //[undefined,undefined]

二、其他用法

1.交换变量

let a=100,b=200;
[a,b]=[b,a];

2.接收不定参数

  • 可用解构赋值的方法接收函数返回的多个参数
  • 不定参数可用...号接收
const fn=()=>({name:'k',age:'t',size:'m'});

let {name,age,size}=fn();
console.log(name);
console.log(age);
console.log(size);

let {id:userid,name:username,age:mage}=fn();
console.log(userid);
console.log(username);
console.log(mage);

let {name,...other}=fn();
console.log(other);  //{age: "t", size: "m"}

3.Map对象的遍历解构

var map=new Map();
map.set("id","007");
map.set("name","cursor");

for(let [key,value] of map){
    console.log(key+ ' is '+value);
}
    // id is 007
    // name is cursor

for(let [key] of map){
    console.log(key);
}
    // id
    // name

for(let [,value] of map){
    console.log(value);
}
    // 007
    // cursor

END

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解webpack es6 to es5支持配置
  • ES6下React组件的写法示例代码
  • ES6中参数的默认值语法介绍
  • ES6学习教程之对象的扩展详解
  • Javascript ES6中数据类型Symbol的使用详解
  • 详解webpack 配合babel 将es6转成es5 超简单实例
  • ES5 ES6中Array对象去除重复项的方法总结
  • JS ES6中setTimeout函数的执行上下文示例
  • JS ES6多行字符串与连接字符串的表示方法
  • JS实现禁止高频率连续点击的方法【基于ES6语法】

相关文章

  • 2017-05-11javascript添加前置0(补零)的几种方法
  • 2017-05-11AngularJS双向绑定和依赖反转实例详解
  • 2017-05-11利用js定义一个导航条菜单
  • 2017-05-11AngularJS表格样式简单设置方法示例
  • 2017-05-11JS复制对应id的内容到粘贴板(Ctrl+C效果)
  • 2017-05-11Javascript 使用ajax与C#获取文件大小实例详解
  • 2017-05-11windows下vue-cli及webpack搭建安装环境
  • 2017-05-11详解angular2封装material2对话框组件
  • 2017-05-11BootStrap CSS全局样式和表格样式源码解析
  • 2017-05-11angularjs过滤器--filter与ng-repeat配合有奇效

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
    • 原生js实现电商侧边导航效果
    • Vue.js 2.0中select级联下拉框实例
    • jQuery输入框密码的显示隐藏【代码分享】
    • JavaScript简单生成 N~M 之间随机数的方法
    • jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
    • jQuery中DOM节点的删除方法总结(超全面)
    • 微信小程序 MD5的方法详解及实例代码
    • 微信小程序 弹窗自定义实例代码
    • jQuery获取Table某列的值(推荐)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有