ES6的常用特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012194956/article/details/82703777

1.变量声明let && const

let用于声明变量,const用于声明常量,两者都为块级作用域。

const声明的常量被设置完成之后就不能修改,如果声明的是一个对象,那么可以改变对象的值,只要内存地址不变即可。

let声明的变量不存在变量提升特性,而var声明的变量存在变量声明提升,即变量可以在声明之前使用,值为undefined。

const在声明时必须被赋值。

let不允许在相同作用域内重复声明同一个变量。

2.解构赋值

解构:ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值。

解构赋值允许指定默认值。(如果一个数组成员不严格等于===undefined,那么默认值不会生效)。

数组的解构赋值是由其位置决定,对象的解构赋值由其键名决定。

字符串也可以解构赋值,被转换成一个类似数组的对象。

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。

null和undefined无法转换为对象,所以会报错。

3.模板字符串(Template String)

模板字符串使用反引号(``)来代替普通字符串中的双引号和单引号,它可以被当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

将表达式嵌入字符串中进行拼接时,用${}来界定。

如果在模板字符串中需要使用反引号,则在其前面使用反斜杠转义。

使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出中。

4.箭头函数

ES6中的箭头函数是函数的一种简写形式。

箭头函数几点注意事项:

(1)this关键字指向当前上下文(即定义时所在对象,而不是调用时所在对象)。

(2)箭头函数不可以被当做构造函数,也就是说不能使用new命令。

(3)不可以使用arguments对象,如果需要获取参数,可以使用rest参数。

(4)箭头函数不能用作Generator函数,不能使用yield命令。

5.函数的参数默认值

在ES6之前,不能直接为函数的参数指定默认值,ES6可以直接将默认值卸载参数定义的后面。

指定了默认值后,函数的length属性会失真,此时的length属性将返回没有指定默认值的参数个数。

函数参数变量是默认声明的,不能用let和const再次声明。

使用参数默认值时,函数不能有同名参数。

通常情况下,定义了默认值的参数应该是函数的尾参数。

6.rest参数和扩展运算符

ES6引入了rest参数(形式为“...变量名”),用于获取函数的多余参数,就可以不用arguments对象了。

rest参数搭配的变量是一个数组。

rest参数只能是函数的最后一个参数。

扩展运算符是三个点(...),它的作用与rest相反,是将一个数组转为用逗号隔开的参数序列。

扩展运算符可以展开数组,因此不再需要使用apply将数组转换为函数的参数。

扩展运算符可用于合并数组。

只要具有Iterator接口的对象,就都可以使用扩展运算符,如Map和Set,Generator函数。

7.第7种数据类型——Symbol

ES6引入了Symbol,是一种新的原始数据类型,表示独一无二的值,也是JavaScript语言的第7种数据类型。

Symbol函数不能使用new命令,因为生成的Symbol是一个原始类型的值,不是对象,它是一种类似字符串的数据类型。

Symbol值不能与其他类型的值进行运算。

相同参数的Symbol函数的返回值是不相等的。

Symbol函数的可以接受一个字符串作为参数,如果参数是一个对象,就会调用对象的toString方法将其转为字符串,然后生成一个Symbol值。

8.Set && Map数据结构

ES6提供了新的数据结构——Set,它类似于数组,但是成员的值都是唯一的,没有重复。

Set本身是一个构造函数,用来生成Set数据结构。

Set的实例方法add()用于向Set结构添加成员,size返回成员数,delete()用于删除某个值,has()用于判断某个值是否为Set成员,clear()用于清除所有成员。

在Set内部,两个NaN是相等的。两个对象总是不相等的。

ES6提供了Map数据结构,它类似于对象,但是对象只接受字符串作为键名,而Map的“键”可以是各种类型。

Map的键严格相等,可是为一个键,但NaN不严格相等,也将其视为一个键。

Map实例的size属性返回成员数,set()方法设置key对应的value,get()方法获取指定key的值,has()方法判断某个键是否在Map中,delete()方法删除某个键,clear()方法清除所有成员。

9. Promise对象

Promise是异步编程的一种解决方案。

Promise兑现代表一个异步操作,有3种状态:Pending(进行中)、Fulfilled(已成功)、Rejected(已失败)。

Promise的缺点:(1)无法取消。一旦新建一个Promise,它就会立即执行;(2)如果不设置回调函数,其内部抛出的错误将不会反映到外部;(3)当处于Pending状态时,无法得知目前具体进展到哪一步。

Promise是一个构造函数,用于生成Promise实例。构造函数接收一个函数作为参数,该函数的两个参数分别是resolve和reject,且resolve和reject分别为一个函数,由JS引擎部署。

resolve函数的作用是将Promise对象的状态由“未完成”变为“成功”(Pending---Resolved),在异步操作成功时调用。

reject函数的作用是将Promise对象的状态由“未完成”变为“失败”(Pending---Rejected),在异步操作失败是调用。

Promise的实例可以用then()方法接受两个回调函数作为参数,分别为Fulfilled和Rejected状态的回调函数,其中第二个参数可选。

10.for...of循环

ES6引入了for...of循环作为遍历所有数据结构的统一方法。只要数据结构部署了Iterator属性,就可以用for...of循环遍历。

for...of可以使用的范围:数组,字符串,Set结构,Map结构,类数组对象,Generator对象。

11.Class(类)

ES6引入了Class关键字可以定义类。

类的内部定义的所有方法都是不可枚举的。

constructor方法时类的默认方法,通过new命令生成类的实例时自动调用该方法。

生成类的实例必须要用new关键字,否则会报错。

类不存在变量提升。

如果类的方法内部有this关键字,它默认指向类的实例。

Class可以通过extends关键字实现继承,子类必须在constructor方法中调用super方法,否则新建实例会报错(因为子类没有自己的this对象,而是继承父类的this对象)。

12.数值的扩展

ES6在Number对象上提供了Number.isFinite()和Number.isNaN(),前者用于判断是否为有限数值,后者判断是否为非数值。

ES6将全局parseInt()和parseFloat()移植到Number对象上,行为不变,即表示为Number.parseInt()和Number.parseFloat()。

猜你喜欢

转载自blog.csdn.net/u012194956/article/details/82703777