介绍
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
ES6新增的东西很多,我们不可能马上就掌握所有知识点,所以在这把常用到的知识点总结下。
let 和 const
let
let和var类似,都是用来声明变量的,但它和var又有些不同:
- let 声明的变量仅在包含它的代码块里有效 - 1 
 2
 3
 4
 5
 6
 7
 8
 9- //let实际上为 JavaScript 新增了块级作用域,let声明的变量只在包含它的 {} 里有效,在代码块外面访问不到它 
 {
 var a = 1;
 let b = 2;
 }
 console.log(a); //1
 console.log(b); //Uncaught ReferenceError: b is not defined
- let 不存在变量提升 - 1 
 2
 3
 4
 5
 6
 7- //var情况 
 console.log(a); //undefined
 var a = 1;
 console.log(b); //Uncaught ReferenceError: b is not defined
 let b = 2;
- 暂时性死区 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16- //只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响,所以在let声明变量之前,这个变量都是不可用的,这块区域就是“暂时性死区” 
 if(true){
 a = 1; //ReferenceError
 console.log(a); //ReferenceError
 
 let a; //此处结束死区
 console.log(a); //undefined
 
 
 a = 2;
 console.log(a); //2
 
 //上面代码中,在 let 命令声明变量 a 之前,都属于变量 a 的“死区”。
 //其实就是不允许变量提升的结果。
 }
- let 不允许重复声明 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17- { 
 var a = 1;
 var a = 2; //不报错
 }
 {
 let a = 1;
 var a = 2; //Identifier 'a' has already been declared
 }
 {
 let a = 1;
 let b = 2; //Identifier 'a' has already been declared
 }
 //只要同作用域里有let声明了同一个变量,就会报错
const
const声明一个只读的常量。一旦声明,常量的值就不能改变。1
2
3
4const a = 1;
console.log(a);    //1
a = 2;   //"a" is read-only
值得注意的是,不是变量的值不可改动,而是变量指向的那个内存地址不得改动。
对于简单类型的数据(数值、字符串、布尔值),一旦被赋值就不可改动,但是对于引用类型,主要是对象和数组,可以修改里面的属性值。
| 1 | const arr = [1,2,3]; | 
const其他特性和let相同,即上面let中的四点。
结构赋值
官方点说,ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
其实讲得明白点,就是左右匹配赋值,举个例子就明白了。
数组解构
| 1 | //先前给变量赋值,你需要一个一个赋值 | 
对象解构
对于对象,同数组,需要注意的就是,数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
不就是属性名相同吗
| 1 | let {a,b} = {'a':1, 'b':2} | 
字符串解构
| 1 | const [a, b, c, d, e] = 'hello'; | 
模板字符串
ES6在字符串中扩展了不少东西,其中模板字符串简直就是神器
在之前拼接一个字符串,你需要这样:
| 1 | 'hello'+obj.name+','+'i am your friend' | 
ES6中你可以这样:
| 1 | `hello ${obj.name} ,i am your friend` | 
这样你或许看不出来这种优势,但是如果字符串很长时,这就是利器:1
2
3
4
5
6`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`
没错,它可以直接输出html结构,记住是保留空格和缩进的哟。当然如果你不想保留,也可以使用trim方法消除它,但我想用了这个方法的就不会想像之前那样一大串吧,所以就不多赘述了。
模板字符串中嵌入变量,需要将变量名写在${}之中。大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。1
2
3
4
5
6
7
8
9
10
11
12let x = 1;
let y = 2;
`${x} + ${y} = ${x + y}`
// "1 + 2 = 3"
`${x} + ${y * 2} = ${x + y * 2}`
// "1 + 4 = 5"
let obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"
也可以调用函数1
2
3
4
5function fn() {
  return "Hello";
}
`${fn()}  world`   //hello world