ES6 新特性(深入浅出ES6—阮一峰)

前言: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很好的解决了这一问题。因为他们是块级作用域, 在代码块(用{}表示)中使用letconst声明变量, 该变量会陷入暂时性死区直到该变量的声明被处理。没有了变量提升,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更严谨和规范。

你可能感兴趣的:(ES6)