ES6学习笔记第三章

  1. 数组的解构赋值

基本用法

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

以前,为变量赋值,只能直接指定值。

var a = 1;

var b = 2;

var c = 3;

而ES6允许写成下面这样。

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

这种写法属于“模式匹配”,只要等号两边模式相同,左边的变量就会被赋值。

如果解构不成功,变量的值就等于undefined。

var [foo] = [ ];

var [bar, foo] = [1];

以上两种情况都属于解构不成功,foo的值都会等于undefined。

另一种情况是不完全解构,即等号左边的模式只匹配等号右边数组的一部分。

let [x,y] = [1,2,3]

x//1;

y//2

如果右边不是数组,将会报错。

只要某种数据解构酱油Iterator接口,都可以采用数组形式的解构赋值。

默认值

结构赋值允许指定默认值

ES6内部使用严格相等运算符(===)判断一个位置是否有值,所以如果一个数组成员不严格等于undefined,默认值是不会生效的。

默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

2.对象的解构赋值

var { foo, bar} = {foo:"aaa",bar:"bbb"};

foo//"aaa"

bar//"bbb"

对象解构赋值和数组解构赋值的最大不同,数组是按元素次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能正确取值

var{ bar ,foo} = {foo:"aaa",bar:"bbb"};

foo//"aaa"

bar//"bbb"

如果变量名和属性名不一样,必须如下写

var {foo: baz}={foo:"aaa",bar:"bbb"};

baz//"aaa"

对象解构赋值简写

let = {foo:foo,bar:bar} = {foo:"aaa",bar:"bbb"}

对象解构的内部机制,是先找到同名属性,然后再赋值给对应的变量。真正被赋值的是后者。

var {foo : baz} = {foo:"aaa",bar:"bbb"};

baz // "aaa"

foo // foo is not defined

上述代码中真正被复制的是变量baz, 而不是模式foo。

注:采用这种写法时,变量的声明和赋值是一体的,对于let和const而言,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错。

如果结构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错

var {foo:{bar}} = {baz: "baz"};//报错

var x ;

{x} = {x : 1};

js引擎会将{x}理解成为一个代码块,从而发生语法错误。

只要不将大括号写在首行,避免js引擎将其解释为代码块。

3.字符串的解构赋值。

此时字符串被转换成了一个类似数组的对象。

const [a,b,c,d,e] = "hello";

a//"h"

b//"e"

c//"l"

...

类似数组的对象都有length属性,因此还可以对这个属性解构赋值。

let {length : len} = "hello";

len // 5

4.数值和布尔值得解构赋值

解构赋值时,如果等号右边是数值或布尔值,则会先转为对象。

let {toString: s} = 123;

s === Number.prototype.toString// true;

let {toString: s} = true;

s === Boolen.prototype.toString// true;

解构赋值的规则是,只要等号右边的值不是对象,就先将其转换为对象。由于undefined 和 null 无法转为对象,所以对它们进行解构赋值都会报错。

5.函数参数的解构赋值

函数的参数也可以解构赋值。

function add([x,y]){

return x + y;

}

add ([1,2]) //3

6.圆括号问题

不能使用圆括号的3中情况

1.变量申明语句中,模式不能带有圆括号

2.函数参数中,模式不能带有圆括号

3.不能将整个模式或者嵌套模式中的一层放在圆括号中

可以使用圆括号的情况:

赋值语句的非模式部分可以使使用圆括号。

7.用途

变量解构的用途

变换变量的值。

[x,y] = [y,x];

从函数返回多个值

函数参数的定义

提取JSON数据

函数参数的默认值

遍历Map解构

输入模块的指定方法。

时间: 2024-10-27 11:35:47

ES6学习笔记第三章的相关文章

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

ES6学习笔记(三)

ES6加强了对Unicode的支持,并且扩展了字符串对象. 1.字符的Unicode表示法 JavaScript允许采用\uxxxx形式表示一个字符,其中“xxxx”表示字符的码点. "\u0061" // "a" 但是,这种表示法只限于\u0000——\uFFFF之间的字符.超出这个范围的字符,必须用两个双字节的形式表达. "\uD842\uDFB7" // "??" "\u20BB7" // "

Java学习笔记—第三章

第三章  标识符.关键字和数据类型 1. Java标识符和关键字:在程序设计中,通常用一个记号对变量.常量.方法和类等进行标识,这个记号称为标识符.Java语言本身使用了一些标识符,这些标识符称为Java关键字,用户在命名标识符时应该避免使用这些Java关键字,否则将导致程序无法进行编译. Java中的关键字如下: abstract 抽象 assert 断言 boolean 布尔 break 中断 byte 字节 catch 捕获 char 字符 class 类 continue 继续 defa

【PMP】Head First PMP 学习笔记 第三章 过程框架

第三章 过程框架 项目中完成的所有工作都由过程构成. 项目中的完成的所有工作都有一个模式(pattern).先计划,再去做.工作时,总是对项目与原先的计划进行比较.如果开始偏离计划,就要由你做出矫正,让一切重新走上正轨.过程框架--过程租和知识领域--正式这一切顺利完成的关键. 分阶段管理 分阶段,项目的每个阶段(phase)都会经过5个过程租,从启动到收尾,项目的多个阶段就会存在各种关联关系 顺序关系(sequenital relationship).多个阶段相继发生并不存在重叠,每个阶段在前

c#高级编程第七版 学习笔记 第三章 对象和类型

第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 类和结构都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法 结构和类的区别是他们在内存中的存储方式.访问方式(类是存储在堆上的引用类型,而结构是存储在栈上的值类型)和他们的一些特征(如结构不支持继承).较小的数据类型使用结构可提高性能.但在语法上,结构和类非常相似,主要的区别是使用

Java学习笔记—第三章 标识符、关键字和数据类型

第三章  标识符.关键字和数据类型 1. Java标识符和关键字:在程序设计中,通常用一个记号对变量.常量.方法和类等进行标识,这个记号称为标识符.Java语言本身使用了一些标识符,这些标识符称为Java关键字,用户在命名标识符时应该避免使用这些Java关键字,否则将导致程序无法进行编译. Java中的关键字如下: abstract 抽象 assert 断言 boolean 布尔 break 中断 byte 字节 catch 捕获 char 字符 class 类 continue 继续 defa

Java Web 学习笔记 第三章 java基础(二)

第三章 java基础(二) 一.转义符 转义字符是"\",通过转义字符,可表示一些特殊的字符. 例如: '\n'  表示回车 '\t'   表示 制表符字符,一个制表符表示向右跳8-10个字符 '\\'   表示\ '\''   表示单引号 '\"'  表示双引号 "\u4e2d"表示unicode编码对应的字符(汉字:中). 二.布尔类型的概念和用法 boolean 类型用来表示肯定或否定两种可能. boolean 常用在分支语句.循环语句中. true

【MySQL】《高性能MySQL》 学习笔记,第三章,服务器性能剖析

第三章:服务器性能剖析 ? 本章将针对如下三个问题进行解答: ? 如何确认服务器是否达到了性能最佳的状态 ? 找出某条语句为什么执行不够快 ? 诊断被用户描述成"停顿","堆积","卡死"的某些间歇性疑难故障 1.性能优化简介: ? 针对性能问题,1000个DBA,有1000个回答.诸如,"QPS","CPU Load","可扩展性"之类. 原则一:我们将性能定义为完成某件任务所需要的时

JavaScript高级程序设计学习笔记第三章--基本概念

一.标识符: 1.区分大小写 2.命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($) 其他字符可以是字母.下划线.美元符号或数字 标识符中的字母也可以包含扩展的 ASCII 或 Unicode 字母字符(如 À 和 Æ) ,但不推荐这样做. 不能把关键字.保留字.true.false和null用作标识符 3.书写方式:最好按照驼峰大小写格式书写,就是第一个字母小写,剩下的每个单词的首字母大写,但不强制这么做二.注释(两种方式) 单行注释:// 多行注释:/*……*/ 三.严格