ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。
也就是说,ES6就是ES2015。
虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了。所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了…
在我们正式讲解ES6语法之前,我们得先了解下Babel。
Babel
Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。大家可以选择自己习惯的工具来使用使用Babel,具体过程可直接在Babel官网查看:

最常用的ES6特性
let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments
这些是ES6最常用的几个语法,基本上学会它们,我们就可以走遍天下都不怕啦!我会用最通俗易懂的语言和例子来讲解它们,保证一看就懂,一学就会。
let, const
这两个的用途与var类似,都是用来声明变量的,但在实际运用中他俩都有各自的特殊用途。
首先来看下面这个例子:
var name = 'zach'
while (true) {
var name = 'obama'
console.log(name) //obama
break
}
console.log(name) //obama
使用var 两次输出都是obama,这是因为ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第一种场景就是你现在看到的内层变量覆盖外层变量。而let则实际上为JavaS
let name = 'zach'
while (true) {
let name = 'obama'
console.log(name) //obama
break
}
console.log(name) //zach
另外一个var带来的不合理场景就是用来计数的循环变量泄露为全局变量,看下面的例子:
上面代码中,变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。而使用let则不会出现这个问题。var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
var clickBoxs = document.querySelectorAll('.clickBox')for (var i = 0; i < clickBoxs.length; i++){clickBoxs[i].onclick = function(){ console.log(i)}}
function iteratorFactory(i){var onclick = function(e){ console.log(i)}return onclick; }var clickBoxs = document.querySelectorAll('.clickBox')for (var i = 0; i < clickBoxs.length; i++){clickBoxs[i].onclick = iteratorFactory(i) }
const PI = Math.PIPI = 23 //Module build failed: SyntaxError: /es6/app.js: "PI" is read-only
const monent = require('moment')
class Animal {constructor(){this.type = 'animal'}says(say){console.log(this.type + ' says ' + say)}}let animal = new Animal()animal.says('hello') //animal says helloclass Cat extends Animal {constructor(){super()this.type = 'cat'}}let cat = new Cat()cat.says('hello') //cat says hello
function(i){ return i + 1; } //ES5let p = (i) => i + 1 ; // p(1) 2
function(x, y) {x++;y--;return x + y;}let c = (x, y) => {x++; y--; return x+y} ; // c(4,5) 9
class Animal {constructor(){this.type = 'animal'}says(say){setTimeout(function(){console.log(this.type + ' says ' + say)}, 1000)}}var animal = new Animal()animal.says('hi') //undefined says hi

says(say){var self = this;setTimeout(function(){console.log(self.type + ' says ' + say)}, 1000)

says(say){setTimeout(function(){console.log(this.type + ' says ' + say)}.bind(this), 1000)
class Animal {constructor(){this.type = 'animal'}says(say){setTimeout( () => {console.log(this.type + ' says ' + say)}, 1000)}}var animal = new Animal()animal.says('hi') //animal says hi
var getTempItem = id = > ({
id: id,
name: "Temp"
});
// 等同于:
var getTempItem = function(id) {
return {
id: id,
name: "Temp"
};
};

const values = [5,3,1,9,0];
let result = values.sort( (a,b)=>a-b );
let result = values.sort(function(a,b){
return a -b ;
})
$("#result").append("There are <b>" + basket.count + "</b> " +"items in your basket, " +"<em>" + basket.onSale + "</em> are on sale!");
$("#result").append(`There are <b>${basket.count}</b> itemsin your basket, <em>${basket.onSale}</em> are on sale!`);
<Link to={`/taco/${taco.name}`}>{taco.name}</Link>
let cat = 'ken'let dog = 'lili'let zoo = {cat: cat, dog: dog}console.log(zoo) //Object {cat: "ken", dog: "lili"}
let cat = 'ken'let dog = 'lili'let zoo = {cat, dog}console.log(zoo) //Object {cat: "ken", dog: "lili"}
let dog = {type: 'animal', many: 2}let { type, many} = dogconsole.log(type, many) //animal 2
function animal(type){type = type || 'cat'console.log(type)}animal()
function animal(type = 'cat'){console.log(type)}animal()
function animals(...types){console.log(types)}animals('cat', 'dog', 'fish') //["cat", "dog", "fish"]
//content.jsdefine('content.js', function(){return 'A cat';})
//index.jsrequire(['./content.js'], function(animal){console.log(animal); //A cat})
var animal = require('./content.js')//content.jsmodule.exports = 'A cat'
imp
ort animal from './content'
export default 'A cat'
export default 'A cat'export function say(){return 'Hello!'}export const type = 'dog'
import { say, type } from './content' let says = say()console.log(`The ${type} says ${says}`) //The dog says Hello
import animal, { say, type } from './content' let says = say()console.log(`The ${type} says ${says} to ${animal}`)//The dog says Hello to A cat
import animal, { say, type as animalType } from './content' let says = say()console.log(`The ${animalType} says ${says} to ${animal}`)//The dog says Hello to A cat
import animal, * as content from './content' let says = content.say()console.log(`The ${content.type} says ${says} to ${animal}`)//The dog says Hello to A cat
imp
ort { type } from './content'