let和const命令
let 命令:ES6新增let命令,为JavaScript新增了块级作用域,用法类似于var,特点如下:
- 声明的变量只在let命令所在的代码块内有效
{ let a = 10; var b = 1; }
a // ReferenceError: a is not defined
b // 1
- 不存在变量提升,声明变量一定在声明后使用,否则报错
- 暂时性死区 (temporal dead zone) : 本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
- 不允许重新声明
var tmp = 123;
if(true){
tmp='abc'; // ReferenceError
let tmp;
}
const命令:声明一个只读的常量,一旦声明,必须立即初始化,且常量值不可变。只在声明所在的块级作用域内有效。
变量的解构赋值
用途:
- 交换变量的值
- 从函数返回多个值
- 函数参数的定义
- 提取JSON数据
数组的解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。 解构赋值允许指定默认值, 若数组成员为null, 默认值不生效
let [a, b, c] = [1, 2, 3];
let [ , , third] = ["foo", "bar", "baz"]; // third = "baz"
let [head, ...tail] = [1, 2, 3, 4]; // head = 1; tail = [2, 3, 4]
let [x, y = 1] = [1] // a = 1; b = 1
对象的解构赋值
对象的解构和数组有一个最大的不同,对象的属性没有次序,变量必须于属性同名才能取到正确的值。
let {car, foo} = {foo : 'aaa', bar : 'bbb'}; // foo = "aaa"; bar = "bbb"