第二期,解构赋值如果能够熟练应用确实是个十分方便的功能,但是过分的依赖和嵌套只会让代码理解和维护起来十分困难,是个体现高逼格的表达式呢~

1,解构赋值的基础

//定义:es6运行按照一定模式,从数组或对象中提取值,并对变量进行赋值,如
var [a,b,c] = [1,2,3];
//一些其他方式
let [ , , a1] = [1,2,3];
//a1:3
let [a2,...b2] = [1,2,3,4];
//a2:1,b2:[2,3,4]
let [a3,b3,...c3] = [1];
//a3:1 b3:undefined c3:[]
let [a4,[b4],c4] = [1,[2,3],4];
//a4:1 b4:2 c4:4
function* fibs(){
var a=0;
var b=1;
while (true){
yield a;
[a,b] = [b,a+b];
}
}
var [a5,b5,c5,d5,e5,f5] = fibs();
//f5:5(这个是为什么暂时还不懂,以后在解读,官方解释:fibs是一个Generator函数,原生具有iterator接口,解构赋值时会依次从接口获取值)
//默认值与惰性求值
//在解构赋值时可以指定默认值
var [a6,b6 = 3] = [1];
//a6:1,b6:3 注意:只有在值严格等于(===)undefined时才会使用默认值,null是不行的
//如果默认值是一个表达式,则该表达式是惰性求值的,如
function f(){
console.log("lvyi")
}
let [a7=f()]=[1];
//不会执行f表达式,只在需要时执行内部指令
//ps:默认值是可以引用解构赋值中的其他变量的,但是该变量必须先有赋值
//对象也是可以解构赋值的,原理和数组差不多,但是需要指定模式和变量,并且对象和数组可以嵌套赋值,深入研究比较绕

2,其他形式的解构赋值

//对象解构赋值
var {p:x} = {p:1};
//p是模式,x才是需要赋值的变量,虽然模式可以省如({x}={1}),但复杂的解构中最好不要省如
var node={
loc : {
start:{
line:1
}
}
};
//loc和start都是模式,line才是变量 //字符串的解构赋值
const [a1,b2,c3,d4,e5] = 'hello';
let {length : len} = 'hello';
//len :5 因为字符串是可以转为数组的,而字符串又有length这个同名的属性,因此这两个赋值都是成功的 //数值和布尔值的解构
let {toString : s} =123;
let {toString : s1} = true;
//解构的规则是只要右边的值不是对象就先转为对象在赋值,因此这个两个都有toString这个属性,那么S就可以取到值
//但是undefined和null是没有的,因此如果右边是这两个会报错 //函数参数的解构赋值
function kk([x=0,y=0]){
return x+y
}
kk([1,2]);
//3,0为默认值
//看看下面的值是多少?
console.log([[1,2],[3,4]].map(([d,e]) => d+e));

3,解构赋值的应用

 //变换变量的值
[x,y]=[y,x];
//获取无序的参数或一组参数的值,(最主要方便的用途,以后再也不用遍历json去拿数据了)
var returnData={
id:42,
status : 'ok',
data: [521,214]
};
let {id,status,data:number} = returnData;
//简单明了
//为函数参数设定默认值,上一节有提到,挺好理解的,不用再函数内部写一堆var了

ES6-个人学习笔记二--解构赋值的更多相关文章

  1. ES6学习笔记之解构赋值

    1.数组的解构赋值 简单用法 { // 旧 let a=1,b=3; //新 let [a,b]=[1,3]; console.log(a,b);// 1 3 } 只要等号两边的模式相同,左边的变量就 ...

  2. ES6入门之变量的解构赋值(二)

    前言 在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进 ...

  3. 【系统学习ES6】第二节:解构赋值

    [系统学习ES6] 本专题旨在对ES6的常用技术点进行系统性梳理,帮助大家对其有更好的掌握,希望大家有所收获. ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构.解构是一种打 ...

  4. ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值

    ES6--变量的解构赋值 引言 正文 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量 ...

  5. ES6新特性:利用解构赋值 (destructuring assignment), 简化代码

    本文的Demo的运行环境为nodeJS, 参考:让nodeJS支持ES6的词法----babel的安装和使用 : 解构赋值是一种表达式, 利用这种新语法, 可以直接从数组或者对象中快速提取值 赋值给不 ...

  6. es6基础系列三:解构赋值

    解构就是ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值(只能用于数组,对象或迭代器).如果解构不成功,则等于undefined,但不能赋值为undefined和null,因为undefi ...

  7. EC++学习笔记(二) 构造/析构/赋值

    条款05:了解c++默默编写并调用了哪些函数 编译器可以暗自为 class 创建default构造函数,copy构造函数,copy assignment操作和析构函数所有这些函数都是 public 并 ...

  8. es6基础入门变量的解构赋值

    let [a, b, c] = [1, 2, 3]; let [foo, [[bar], baz]] = [1, [[2], 3]]; foo bar baz let [ , , third] = [ ...

  9. ES6笔记(3)-- 解构赋值

    系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...

随机推荐

  1. Yii - 验证和授权(Authentication and Authorization)

    1. 定义身份类 (Defining Identity Class)  为了验证一个用户,我们定义一个有验证逻辑的身份类.这个身份类实现[IUserIdentity] 接口.不同的类可能实现不同的验证 ...

  2. Yii框架tips

    db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示sql的查询时间在log组件的routes中加入 array('class' ...

  3. Ubuntu下Django初体验(三)——django初体验

    Django中的重要概念: 一次web访问的实质: 1. 客户发送http请求到web服务回 2. web服务器返回html页面给客户 Django概述: 1. URL配置             建 ...

  4. 手机APP上下滚动翻页效果

    //页面初期加载时        $(document).ready(function () { //加载第一页            LoadList(); //滚动换页            $( ...

  5. Servlet/jsp 中 获取页面所有传递参数

    Enumeration en = request.getParameterNames(); while(en.hasMoreElements()){ String el = en.nextElemen ...

  6. 2014-08-05 pig

    Pig的数据类型能够分为两种:一种是scalar类型,包含单一的value,一种是complex类型,包含有其他的类型. 对于scalar类型: int,long,float,double,chara ...

  7. qt中如果用qDebug输出彩色调试信息

    Linux:  在终端输出彩色信息有点类似于html的语法,即在要输出的文字前加上转义字符. 指令格式如下\033[*m 这里的*就是转义字符,例如我们要输出一段绿色的文字 qDebug(" ...

  8. hadoop错误ERROR namenode.NameNode (NameNode.javamain(1657)) - Failed to start namenode java.net.BindException:Port in use:host1:50070

    解决方法: 1.通过lsof -i:50070(lsof可以通过yum install lsof安装)查看,发现是mysql被占用了 2.修改mysql端口 从/usr/share/mysql/my- ...

  9. Linux学习笔记总结--CentOS 设置静态IP

    1.修改网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth ...

  10. 一次向svn中增加所有新增文件 svn add all new files

    svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add