前言:ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。如今,越来越多人尝试使用ES6语法来规范代码,因为,ES6的出现大大简化了前端的代码和书写习惯,使得我们在工作学习中更加高效、便捷、稳定。
正文:在学习ES6的语法过程中,我个人是参考着《ECMAScript 6 入门第三版》,书中关于ES6的介绍和总结非常详尽、明了,给人清晰的思路。那么ES6和ES6到底有哪些区别,换句话说,ES6究竟有哪些新特性值得我们学习,那么我们拭目以待吧。
(1).let、const
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。const声明一个只读的常量。
一旦声明,常量的值就不能改变。但是const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。
由于存在变量提升,在执行function
函数之前,所有变量都会被提升
, 提升到函数作用域顶部.为了解决这个麻烦,let和const很好的解决了这一问题。因为他们是块级作用域, 在代码块(用{}
表示)中使用let
或const
声明变量, 该变量会陷入暂时性死区直到该变量的声明被处理。没有了变量提升,let和const必须先声明后使用。
(2).Map()
在JavaScript对象中,键值对中的键必须是字符串类型,但实际上Number或者其他数据类型也是合理的,为此,ES6中引入了新的数据类型Map。
(3).Set()
Set()是有序列表的结合,而且是没有重复的,因此Set()对象可以用于数组的去重。
let set = new Set([1,2,3,4,4,4,4,4]);
console.log( Array.from(set) ); //输出:[ 1, 2, 3, 4 ]
Set中包含的方法,add()、has、delete()、clear()
Set也能用来保存NaN和undefined, 如果有重复的NaN, Set会认为就一个NaN(实际上NaN!=NaN);实例Set以后的对象拥有这些属性和方法:
属性
Set.prototype
Set.prototype.size
方法
Set.prototype.add()
Set.prototype.clear()
Set.prototype.delete()
Set.prototype.entries()
Set.prototype.forEach()
Set.prototype.has()
Set.prototype.values()
Set.prototype[@@iterator]()
(4).iterable
引入iterable的目的是Map和Array无法像Array通过下标遍历,但是可以通过for...of解决这个问题。
(5).for...of(迭代器)
(6).箭头函数
定义:ES6箭头函数结构为 X => X*X
等价:function(X){return X*X}
(7).Spread / Rest 操作符
(8).解构赋值
(9).允许在对象中使用 super 方法
(10).class
(11).模版字符串(template string),使用 ` ` (反引号作为标识):
既可以当作普通字符串使用,又可以用来定义多行字符串,还可以在字符串中嵌入变量。
//普通字符串、嵌入变量
$(`.content li:eq(${index}) .dataItem`).css("background", "#DBDBDB");
//多行字符串:提示的内容就是按照断开的分行
alert(`Li mei is a beautiful girl,
she is so funny!`)
如果遇到特殊的字符 比如`,则需要在前面加转义字符\
`\`` === "`" // --> true
(12).Proxy
(12).Symbol
Symbol是ES6中的一个新特性,所有拥有[Symbol.iterator]()方法的对象被称为 可迭代的。
(13).Promise
(14).async函数
(15).二进制和八进制字面量
(16).keys,values,entries
ES6 提供三个新的方法 —— entries(),keys()和values()。 用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。
for (let index of ['小明', '小红'].keys()) {
console.log(index);
}
// 0
// 1
for (let item of ['小明', '小红'].values()) {
console.log(item);
}
// '小明'
// '小红'
for (let [index, item] of ['小明', '小红'].entries()) {
console.log(index, item);
}
// 0 "小明"
// 1 "小红"
(17).ES6 声明变量的六种方法:
var、function、let、const、class、import ====>> 详情请点击
在ES5中,JavaScript是没有块级作用域的,如果在块内使用var声明一个变量,它在代码块外面仍旧是可见的。ES6规范给开发者带来了块级作用域,let和const都添加了块级作用域,使得JS更严谨和规范。