es6新语法
let定义变量
-
let变量不允许重复
-
let定义的变量拥有块级作用域,只能在块中访问
1234for(let i = 0; i < 5; i++) {console.log(i);}console.log(i); -
没有预解析,没有变量提升
12console.log(i);let i = 10; -
暂时性死区,就是如果一个作用域中已经存在了某变量,那么你就不能在这个变量的前面使用它,即使上级作用域中含有这个变量也不行,这就是暂时性死区
1234{console.log(i);let i = 10;} -
全局变量不再是window属性
12let i = 5;console.log(window.i);
const定义常量
-
不允许重复声明
123// SyntaxError,在语法分析时就报错let a = 10;let a = 20;1234function fn(arg) {let arg;}fn(10); // SyntaxError -
块级作用域
12345{let a = 10;console.log(a); // 10}console.log(a); // ReferenceError -
没有预解析
12console.log(a); // ReferenceErrorlet a = 10; -
存在暂时性死区
-
即在某作用域内如果存在let、const声明的变量常量,
-
如果在声明前使用它们就报错,也不会从上级作用域中查找。
12345let a = 10;{console.log(a); // ReferenceErrorlet a = 20;}
-
-
全局变量不再是window属性
123let a 10;console.log(a); // 10console.log(window.a); // undefined -
const定义常量时必须一起赋值
1const NAME; // SyntaxError; -
常量的值不允许修改
12const NAME = '哈哈哈';NAME = '嘻嘻嘻'; // TypeError
解构赋值
按照一定的模式,从数组和对象中提取值,然后对变量进行赋值
数组解构
-
完全解构
12345let arr = [10, 20, 30];let [ a, b, c ] = arr;console.log(a); // 10console.log(b); // 20console.log(c); // 30 -
部分解构
123let [ a, , c ] = [10, 20, 30];console.log(a); // 10console.log(c); // 30 -
特殊值
1234let [ a, b, c ] = [10, [ 20, 21, 22 ], {a: 1, b: 2}];console.log(a); // 10console.log(b); // [ 20, 21, 22 ]console.log(c); // {a: 1, b: 2} -
深层解构
1234let [ a, [b1, b2] ] = [10, [ 20, 21, 22 ], 30];console.log(a); // 10console.log(b1); // 20console.log(b2); // 21 -
解构缺失
123let [ a, b ] = [10];console.log(a); // 10console.log(b); // undefined -
默认值
123let [ a = 'aa', b = 'bb' ] = [10];console.log(a); // 10console.log(b); // bb