一、变量的声明与使用 【测试示例需要在node环境中测试,浏览器环境下并不完全兼容ES6代码】
ES6中可以使用 {} 来包含任意一段代码,被 {} 包裹的内容称为一个代码块(局部作用域)

let关键字 【声明变量】
特性:
1.块级作用域    【局部作用于声明的代码块中】
2.变量声明不会提升    【变量未声明前无法使用该变量】
3.暂时性死区    【该变量声明前面的区域】
4.不能重复声明    【同一代码块中不能重复声明同一变量】

const关键字    【声明常量(一般用大写字母表示常量)】
特性:【在遵从let声明变量的特性上再添加如下两条特性】
1、声明时初始化    【声明的同时必须赋值】
2、值不可修改

二、解构
1、数组的解构赋值 【左边是变量,右边是值,左边无匹配值时为undefined】
完全解构【左右数据恰好匹配】
eg:

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

不完全解构【左右数据不同】
a、左边数据多则只声明该变量,其值为undefined
b、右边数据多余项则忽视不考虑
eg:

  1. let [a, [b], d] = [1, [2, 3], 4]; //a = 1; b = 2; d = 4

集合解构【扩展运算符的使用...】
a、...tail返回目前右边未匹配的所有值组成的数组
eg:

  1. let [head, ...tail] = [1, 2, 3, 4]; //head = 1; tail = [2, 3, 4]
  2. //累加操作
  3. let sum = 0;
  4. function test(...arr){
  5. //rest参数【扩展运算符形式接受的参数,返回的为参数数组】 ------>不在推荐使用arguments参数类数组对象
  6. //arr = [1,2,3,4,5]
  7. for(let i=0;i<arr.length;i++){
  8. sum +=arr[i];
  9. }
  10. }
  11.  
  12. test(1,2,3,4,5);

默认值【当匹配值严格等于undefined,默认值生效】
eg:

  1. let [x, y = 'b'] = ['a'];   // x='a', y='b’

默认值为函数
注:先判断是否匹配到值,若匹配值严格等于undefined,再进行默认值的赋值运算;否则,默认值赋值操作不会执行
eg:

  1. function test() {
  2. console.log('test');
  3. return 2;
  4. }
  5. let [x = test()] = [];
  6. console.log(x); //test 2

2、对象的解构赋值 【右边不存在左边变量对应的属性名时,对象属性值为undefined;即对象中未声明的属性的值为undefined】
对象原始结构赋值【变量重命名后,最终声明的变量是重命名的变量】
eg:

  1. let {name:myName,age:myAge} = {name:'nzc',age:18}
  2. //上面代码类比于下面代码【左边name匹配右边对象中同名属性获取其属性值并赋值给name重命名的myName变量==》将let myName = 'nzc'】
  3. let myName = 'nzc';
  4. let myAge = 18;

对象的属性没有次序,变量必须与属性同名才能取到正确的值【重命名相同可以简写】
eg:

  1. let {name:name,age:age} = {name:'nzc',age:18}
  2. //简写如下
  3. let {name,age} = {name:'nzc',age:18}
  4. //类比于下面代码
  5. let name = 'nzc';
  6. let age = 18;

对象嵌套解构
eg:

  1. let person = { param: [ 'nzc', { age: 18 } ] };
  2. let { param: [name, { age }] } = person; //name='nzc' age=18
  3. //类比于下面 param变量被重命名为 [name, { age }],所以自身并未声明;即不存在param变量
  4. let { param: [name, { age }] } = { param: [ 'nzc', { age: 18 } ] }

默认值(默认值生效的条件是,对象的属性值严格等于undefined)
eg:

  1. //name='nzchs'->name变量默认值;age:myAge=21->myAge默认值【age重命名为myAge再赋予默认值】
  2. let {name='nzchs',age:myAge=21} = {name:'nzc',age:18}
  3. let {name='nzchs',age:myAge=21} = {name:'nzc'}

3、字符串的解构赋值
解构时,字符串被转换成了一个类似数组的对象。
eg:

  1. let [a, b, c] = 'hello'; //a=h;b=e;c=l

length属性解构
eg:

  1. let {length : len} = 'hello'; //len = 5 【匹配右边字符串转换为的类数组对象的length属性并将其值赋值给重命名的len变量】

4、数值和布尔值解构赋值
解构时,如果等号右边是数值和布尔值,则会先转为相应的基本引用数据类型对象
eg:

  1. let {toString: str1} = 123; //函数 str1 === Number.prototype.toString 返回true
  2. let {toString: str2} = true; //函数 str2 === Boolean.prototype.toString 返回true

5、函数参数的解构赋值
基本数组解构赋值传参
eg:

  1. function add([x, y]){ return x + y; }
  2. add([1, 2]); //函数add返回值为3

函数参数带有默认值
eg:

  1. function test({x = 0, y = 0}) {
  2. return [x, y];
  3. }
  4. //函数调用
  5. test({x: 3, y: 8}); // 返回值为[3, 8]
  6. test({x: 3}); // 返回值为[3, 0]
  7. test({}); // 返回值为[0, 0]
  8. test(); //报错 Cannot destructure property `x` of 'undefined' or 'null'

三、解构常用用途
1、变量值的交换
eg:

  1. let x = 1;
  2. let y = 2;
  3. [x,y] = [y,x];
  4. console.log(x,y); //2 1   

2、函数参数的赋值:
eg:

  1. //[a=0,b=1] = [1] a=1,b=1
  2. function test([a=0,b=1]){
  3. return a+b;
  4. }
  5. test([1]); //返回值为2

3、提取对象中的数据
eg:

  1. let obj= { id: 42, status: "OK", data: [867, 5309] };
  2. let { id, status, data: number } = obj; //定义对应的变量

4、输入模块的指定方法

  1. const { SourceMapConsumer, SourceNode } = require("source-map");

5、遍历map结构

  1. var map = new Map();
  2. map.set('name', 'nzc');
  3. map.set('age', 18);
  4. for (let [key, value] of map) {
  5. console.log(key + " is " + value); // name is nzc age is 18
  6. }

ES6 变量与解构(二)的更多相关文章

  1. ES6 变量的解构赋值

    数组的解构赋值     var [a,b,c] = [1,2,3];    左边是变量,右边是值,根据数据结构一一对应 只要等号两边的模式相同,左边的变量就会被赋予右边对应的值,必须模式相同 如果等号 ...

  2. ES6 - 变量的解构赋值学习笔记

    变量的解析赋值 数组的解析赋值 es6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这就称为解构. var a = 1; var b = 2; var c = 3; //在es6中允许写成 ...

  3. ES6 变量的解构

    默认值 let [foo = true] = []; foo // true let [x, y = 'b'] = ['a']; // x='a', y='b' let [x, y = 'b'] = ...

  4. es6变量的解构赋值学习笔记

    1. 解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象.由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错. let { prop: x } = undefin ...

  5. ES6变量的解构赋值

    变量的解构赋值 1.数组的解构赋值 2.对象的解构赋值 3.字符串的解构赋值 4.数值和布尔值的解构赋值 5.函数参数的解构赋值 6.圆括号问题 7.用途 1.数组的解构赋值 ES6 允许写成下面这样 ...

  6. es6—变量的解构赋值

    数组的解构赋值 ]]]]]]] = []}} = {}} = {}})]: first]: last} = arr} = {}) {}))}))}) {}))}))].]]]])})] }}} = { ...

  7. ES6变量的解构赋值(二)对象的解构赋值

    前面我们知道,数组的结构赋值需要按顺序进行赋值, let [a,,c] = [,,] console.log(a); console.log(c);//3 let [a,b] = [1];consol ...

  8. ES6变量的解构赋值(一)数组的解构赋值

    let[a,...arr]=[1,2,3,4];//a==>1 arr==>[2,3,4] let [x, y, ...z] = ['a'];//a==>'a' y==>und ...

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

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

随机推荐

  1. 2018710101110-李华《面向对象程序设计(java)》第十二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  2. python字典基本操作

    字典是python中五中基本数据类型之一,虽然它的赋值稍微麻烦点,但用起来真的是很方便.它用键值对来存放数据,所谓键值对,就是一个键,对应一个值,如果后面对前面的键再次赋值,第一次的值就被覆盖掉.像是 ...

  3. zz在自动驾驶研发中充分发挥数据的潜能

    本次分享内容提纲 数据标注 数据驱动开发 数据驱动决策 前言 上图这是我加入小马智行之前的一个小故事.这不断的提醒我,人工智能需要有足够的数据量,并且充分发挥这些数据的潜能,是我们作为人工智能公司的一 ...

  4. WebJars简介 —— 前端资源的jar包形式(以后接触到再深入总结)

    对于日常的web开发而言,像css.js.images.font等静态资源文件管理是非常的混乱的.比如jQuery.Bootstrap.Vue.js等,可能每个框架使用的版本都不一样.一不注意就会出现 ...

  5. 用 mongodb + elasticsearch 实现中文检索

      而 elasticsearch 可以很好的支持各种语言的全文检索,但我们暂时又不想切换到 elasticsearch 作为后端数据库. 当然,可以在 web 应用中存储数据的时候,再主动写一份到 ...

  6. 学习:API断点和条件记录断点和内存断点的配合

    前言:感觉可能与之前有点相同,主要是介绍shark恒老师说的一种断点方法,结合了API和条件记录进行下断点 适用条件:当我们利用简单的WINDOWS API函数如MessageBoxW/A 又或者获取 ...

  7. [LeetCode] 350. Intersection of Two Arrays II 两个数组相交之二

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  8. oracle--查询速度慢

    查询速度慢的原因很多,常见如下几种: 1,  没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2, I/O吞吐量小,形成了瓶颈效应. 3, 没有创建计算列导致查询不优化. 4, ...

  9. JVM系列之六:内存溢出、内存泄漏 和 栈溢出

    1. OOM && SOF OutOfMemoryError异常: 除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能, 内存 ...

  10. nuget安装说明

    1.先百度安装nuget.server 比如 https://www.cnblogs.com/tomfang/articles/3999303.html 2.官网下载nuget.exe nuget p ...