Let 和 Const
var
定义的变量没有块级作用域的概念。
Class(类)
在es6之前,生成实例对象,写一个构造函数:
function Person(name, age) {
this.name = name;
this.age =age;
}
Person.prototype.information = function () {
return 'My name is ' + this.name + ', I am ' + this.age;
}
在es6之后:
class Person {
contructor(name, age) {
this.name = name;
this.age = age;
}
information() {
return 'My name is ' + this.name + ', I am ' + this.age;
}
}
箭头函数(Arrow function)
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this
,arguments
,super
或 new.target
。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。
var list = [1,2,3,4,5,6,7];
var newList = list.map(function (item) {
return item * item;
})
//在es6里面
const list = [1,2,3,4,5,6,7];
const newList = list.map(item => item * item);
函数参数默认值(Function parameter defaults)
模板字符串(Template string) ``
解构赋值(Destructuring assignment)
通过解构赋值, 可以将属性/值从对象/数组中取出,赋值给其他变量。
let a = 10
let b = 20
[a, b] = [b, a] //交换两个变量的值
模块化(Module)
扩展操作符(Spread operator)
扩展操作符可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。
Promise
Promise 是ES6提供的一种异步解决方案,比回调函数更加清晰明了。
三种状态:pending、resolved、reject
Symbol
Map对象
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
ES7(ES2016)
Array.prototype.includes()includes()
方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
const array1 = [1, 2, 3]
console.log(array1.includes(2)) // true
const pets = ['cat', 'dog', 'bat']
console.log(pets.includes('cat')) // true
console.log(pets.includes('at')) // false
ES8(ES2017)
async/await
虽然Promise
可以解决回调地狱的问题,但是链式调用太多,则会变成另一种形式的回调地狱 —— 面条地狱,所以在ES8里则出现了Promise
的语法糖async/await
,专门解决这个问题。
Object.values()Object.values()
方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
Object.entries()Object.entries()
方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for…in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)。
padStart()padStart()
方法用另一个字符串填充当前字符串(重复,如果需要的话),以便产生的字符串达到给定的长度。填充从当前字符串的开始(左侧)应用的。
padEnd()padEnd()
方法会用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾(右侧)开始填充。
ES9(ES2018)
or await…offor await...of
语句会在异步或者同步可迭代对象上创建一个迭代循环,包括 String
,Array
,Array-like
对象(比如arguments
或者NodeList
),TypedArray
,Map
, Set
和自定义的异步或者同步可迭代对象。其会调用自定义迭代钩子,并为每个不同属性的值执行语句
对象扩展操作符
ES6中添加了数组的扩展操作符,让我们在操作数组时更加简便,美中不足的是并不支持对象扩展操作符,但是在ES9开始,这一功能也得到了支持。
ES10(ES2019)
or await…offor await...of
语句会在异步或者同步可迭代对象上创建一个迭代循环,包括 String
,Array
,Array-like
对象(比如arguments
或者NodeList
),TypedArray
,Map
, Set
和自定义的异步或者同步可迭代对象。其会调用自定义迭代钩子,并为每个不同属性的值执行语句
对象扩展操作符
ES6中添加了数组的扩展操作符,让我们在操作数组时更加简便,美中不足的是并不支持对象扩展操作符,但是在ES9开始,这一功能也得到了支持。