一、ES6是什么?
ES6就是ECMAScript的第6个版本
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
二、ES6新特性
1、新的原始类型和变量声明
1.1、Symbol
新的原始类型为Symbol,在此之前,JS支持支持6种数据类型:Object,String,Boolean,Number,Null,Undefined。Object包含了Data,function,Array等,这三种是常规用的。。ES6新增了Symbol类型,表示独一无二的值,即每个symbol类型的值都不相同。
谷歌67版本还增加了Bigint类型,
BigInt
数据类型的目的是比Number
数据类型支持的范围更大的整数值。在对大整数执行数学运算时,以任意精度表示整数的能力尤为重要。使用BigInt
,整数溢出将不再是问题。
此外,可以安全地使用更加准确时间戳,大整数ID等,而无需使用变通方法。 BigInt
目前是第3阶段提案, 一旦添加到规范中,它就是JS 第二个数字数据类型,也将是 JS 第8种基本数据类型
1.2、let 和 const
这俩也是ES6新增的声明变量关键字。
他们声明的变量仅在let和const关键字所在的代码块内起作用,即在使用let和const的那一对大括号{}内起作用,也称块级作用域(ES6之前只有函数作用域和全局作用域)。
let和const声明变量不会在预编译过程中有提升行为(在全局声明也不会变成window的属性),且同一变量不能重复声明。所以要使用这类变量,只能在let和const关键字之后使用它们。
let和const关键字还有一个特性:“暂时性死区”,即在使用了该关键字的块级作用域中,其内部使用let和const关键字声明的变量与外部作用域中的变量相互隔绝,互不影响。即使是同名变量。
1.3、解构赋值
解构赋值是对赋值运算符的扩展。它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
2、新的对象和方法
2.1、Map和Set
Map对象用于保存键值对,任何值JavaScript支持的值都可以作为一个键或者一个值。这听起来和对象差不多啊?其实它们还是有区别的:
a) object的键只能是字符串或ES6的symbol值,而Map可以是任何值。
b) Map对象有一个size属性,存储了键值对的个数,而object对象没有类似属性。
2.2、对象新特性
创建对象的字面量方式可以更加简洁。直接使用变量名作为属性,函数体作为方法,最终变量值变成属性值,函数名变成方法名。
ES6对象新增了两个方法,assign和is。
assign用于浅拷贝源对象可枚举属性到目标对象。
2.3、字符串新方法
includes()判断字符串是否包含参数字符串,返回boolean值。如果想要知道参数字符串出现的位置,还是需要indexOf或lastIndexOf方法。
startsWith()/endsWith(),判断字符串是否以参数字符串开头或结尾。返回boolean值。这两个方法可以有第二个参数,一个数字,表示开始查找的位置。
2.4、数组的新方法
of()是ES6新增的用于创建数组的方法。of把传入的参数当做数组元素,形成新的数组。
3、函数
3.1、参数默认值
ES6首次添加了参数默认值。我们再也不用在函数内部编写容错代码了。
和参数默认值一起,ES6还带来了不定参。它的功能和使用arguments差不多。
3.2、箭头函数
箭头函数实现了一种更加简洁的书写方式,并且也解决了关键字声明方式的一些麻烦事儿。箭头函数内部没有arguments,也没有prototype属性,所以不能用new关键字调用箭头函数。
箭头函数的书写方式:参数 => 函数体。
箭头函数和普通函数最大的区别在于其内部this永远指向其父级AO对象的this。
4、class(类)
class 作为对象的模板被引入ES6,你可以通过 class 关键字定义类。class 的本质依然是一个函数。
5、模块导入和导出
1,导入
ES6使用关键字 import 导入模块(文件),有两种常用的方式:
import ‘模块名称’ from ‘路径’;
import ‘路径’;
2,导出
ES6 通过 export 和export default 导出模块。导出的含义是向外暴露、输出,在一个文件中通过 import 导入另一个文件,通过变量即可以接收到导出的数据了。一般情况下,JS文件可以向外输出变量、函数和对象。
6、异步机制
ES6新增了两种实现异步的新机制,Promise和Generator。