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

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

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

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

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

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

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

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

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

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

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

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

    function test() {
console.log('test');
return 2;
}
let [x = test()] = [];
console.log(x); //test 2

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

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

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

    let {name:name,age:age} = {name:'nzc',age:18}
//简写如下
let {name,age} = {name:'nzc',age:18}
//类比于下面代码
let name = 'nzc';
let age = 18;

对象嵌套解构
eg:

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

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

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

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

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

length属性解构
eg:

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

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

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

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

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

函数参数带有默认值
eg:

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

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

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

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

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

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

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

4、输入模块的指定方法

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

5、遍历map结构

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

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. MLflow安装配置初入门

    学习这个时,要和Kubeflow作比较, 看看它们俩在解决和规范机器学习流程方面的思路异同. mlflow三大内涵: Tracking, Projects, Models. 一,基础镜像 harbor ...

  2. 201871010108-高文利《面向对象程序设计(java)》第十周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...

  3. Python进阶-VII 内置函数

    一.内置函数引入 我们已经了解的有; print()  input() range() next()  dir() str() int() list() set() tuple() dict() he ...

  4. 利用nodejs识别二维码内容的方法

    const decodeImage = require('jimp').read; const qrcodeReader = require('qrcode-reader'); qrDecode(&q ...

  5. [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  6. 第02组 Alpha事后诸葛亮

    目录 1. 组长博客(2分) 2. 总结思考(27分) 2.1. 设想和目标(2分) 2.2. 计划(5分) 2.3. 资源(3分) 2.4. 变更管理(4分) 2.5. 设计/实现(4分) 2.6. ...

  7. 通过欧拉计划学Rust(第1~6题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以开始了Rust的快速入门学习. 看了一下网上有关Rust的介绍,都 ...

  8. 如何在 VS2015 上开发 Qt 程序

    所有Qt版本下载地址: http://download.qt.io/archive/qt/ 所有Qt Creator下载地址: http://download.qt.io/archive/qtcrea ...

  9. 局域网Linux机器中病毒简单处理 .aliyun.sh 挖矿病毒 ---不彻底

    1. 昨天晚上同事打电话给我说自己的服务器上面的redis无故被清空了,并且查看aof 日志有很多 wget和write指令 一想就是大事不好.局域网中病毒了.. 2. 今天早上到公司忙完一阵简单看了 ...

  10. OCC与MVCC 的区别

    一.前言 在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,如何保证事务的一致性和隔离性的,同时最大程度地并发. 当多个用户/进程/线程同时对数据库进行操作时,会出现3种冲突情形: ...