ES6知识总结
简介
ECMAScript
(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标是使 JavaScript 可以编写复杂的大型应用程序,成为企业级开发语言。
let 和 const 命令
let 命令
ES6 新增了let
命令,用来声明变量。它的用法类似于var
,但是所声明的变量,只在let
命令所在代码块内有效。
特点如下:
-
存在块级作用域
123456{let a = 10;var b = 20;}console.log(a); // ReferenceError: a is not definedconsole.log(b); // 20上面代码在代码块中,分别用
let
和var
声明了两个变量。然后在代码块之外打印这两个变量,结果let声明的变量出错,var
声明的变量返回了正确的值。这说明let
声明的变量只在它所在的代码块内有效。 -
不存在变量提升
1234567// var的情况console.log(num); // 输出 undefinedvar num = 10;// let的情况console.log(foo); // 报错 ReferenceError: Cannot access 'foo' before initializationlet foo = 20; 不允许重复声明
12let num = 10;let num = 10; // Identifier 'num' has already been declared
const 命令
const声明一个只读的常量。一旦声明,常量的值就不能改变。
1 2 3 4 |
const PI = 3.1415; console.log(PI); // 3.1415 PI = 3.14 // TypeError: Assignment to constant variable. |
特点如下:
-
声明时必须赋初始值
-
标识符一般大写
-
不允许重复声明
-
不允许修改值
-
块级作用域
变量的解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。
这里主要讲解数组的结构赋值
1 2 |
let [a, b, c] = [1, 2, 3]; console.log(a, b, c); // 1 2 3 |
上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。
本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
字符串的扩展
模板字符串
模版字符串是增强版的字符串,用反引号(`)标识。它可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
1 2 3 4 5 6 7 8 9 10 |
// 普通的字符串 let str1 = `This is '\n' very good`; // 多行字符串 let str2 = `This is very good`; // 字符串中嵌入变量 let age = 20; let str3 = `tom's age is ${age}`; |
如果需要在模板字符串中使用反引号,则前面要用反斜杠转义
模板字符串中嵌入变量,需要将变量名写在${}
之中
字符串的新增方法
正则的扩展
数值的扩展
函数的扩展
箭头函数
ES6 允许使用“箭头”(=>
)定义函数。不会更改 this
的指向,用来指定回调函数非常合适。
注意点
- 如果形参只有一个,则小括号可以省略
- 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果
- 箭头函数
this
指向声明时所在作用域下this
的值 - 箭头函数不能作为构造函数实例化
- 不能使用
arguments
参数
rest参数
用于获取函数的参数,用来代替arguments。适用于函数参数个数不定的场景
rest参数必须是最后一个形参
数组的扩展
spread扩展运算符
扩展运算符spread
也是三个点...
。它好比 rest
参数的逆运算,将一个数组转为用逗号分隔的参数序列,对数组进行解包。
Symbol
JS的第七种数据类型,是一种类似于字符串的数据类型。适用于唯一性的场景。
特点:
Symbol
的值是唯一的,用来解决命名冲突的问题Symbol
值不能与其他数据进行运算Symbol
定义的对象属性不能使用for...in
循环遍历,但是可以使用Relect.ownKeys
来获取对象的所有键名
对象的扩展
简化对象写法
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
对象的新增方法
运算符的扩展
Symbol
Set 和 Map 数据结构
Proxy
Reflect
Promise对象
是异步编程的一种解决方案。语法上 Promise
是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。
特点:
- 对象的状态不受外界影响。
- 一旦状态改变,就不会再变,任何时候都可以得到这个结果。
用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 基本用法 const promise = new Promise(function(resolve, reject) { if(异步操作成功) { resolve(value) } else { reject(error) } }) // then方法 (resolve和reject两个回调函数作为参数) promise.then(function(value) { // success }, function(error) { // failure }) |
参考文档
原创文章,作者:seabert,如若转载,请注明出处:https://bysjb.cn/es6.html