ECMAScript 6学习笔记
一、let 和 const 命令
1、let
1、ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
2、var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。
3、暂时性死区,在代码块内,使用let命令声明变量之前,该变量都是不可用的。
4、let不允许在相同作用域内,重复声明同一个变量。
2、const
1、const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
2、const的作用域与let命令相同:只在声明所在的块级作用域内有效
3、const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
4、const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
一、变量的解构赋值
1、基本用法
1、本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
let [a, b, c] = [1, 2, 3];
2、对象的结构赋值
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。如果变量名与属性名不一致,必须写成下面这样。
baz // "aaa"
let obj = { first: 'hello', last: 'world' };
let { first: f, last: l } = obj;
f // 'hello';l // 'world'
3、交换变量的值,let x = 1;let y = 2;[x, y] = [y, x];
4、函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。
function example() {return {
foo: 1,
bar: 2
}; }
let { foo, bar } = example();
5、解构赋值对提取JSON对象中的数据,尤其有用。
let jsonData = { id: 42, status: "OK",data: [867,5309]};
let { id, status, data: number } = jsonData;
6、遍历Map结构
var map = new Map();map.set('first','hello');map.set('second', 'world');
for (let [key, value] of map) { console.log(key + " is " + value);}