ES6 — 部分语法笔记
纪录一下关于接触过的部分ES6语法:
1.解构赋值
ES6中,解构赋值可以写成以下结构:
let [a, b, c] = [1, 2, 3];
按照之前的写法,要写成以下结构:
let a = 1;
let b = 2;
let c = 3;
对比上面两个代码段,可以看出,解构赋值极大程度的简化了代码量,就像是一个压缩包,将原本零散的数据打包在一起,以一一对应的方式呈现。解构赋值除了完全解构数据之外,还支持部分解构:
let [a,, c] = [1, 2, 3];
上面代码中表示:a = 1 ,c = 3 ,因为 c 前面有两个逗号,相当于 a = 1 , = 2,c = 3 ,这样也属于一一对应,程序不会报错,但只有 a 和 c 会被解构。
除了解构之外,还可以再数据被机构之前,先给它一个默认值:
let [a ,b = 4, c] = [1, 2, 3];
let [a ,b = 4, c] = [1, undefined, 3];
上面代码第一条语句中,在解构之前,给了 b 一个默认值 4,但在解构之后,b 的值就改变了,b = 2,由此可见,如果右边有对应值,那么左边的默认值就会被取代。
再看第二条语句,同样在解构之前,给了 b 一个默认值 4,而在解构之后,b 的值还是 2,并没有发生改变。这是因为,右边 b 对应的值是 undefined。在解构赋值时,如果右侧对应的值是 undefined 且左侧对应的变量带有默认值,那么左侧变量的值仍然是它自带的默认值。
这是一种特殊情况,只有右侧是 undefined 的时候,默认值才会生效。
2.let 命令
ES6 中,let 命令 和 var 有些类似,但 let 弥补了 var 的一个很大缺陷。
for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
let 命令只在它所在的代码块生效,上面这段代码就会报错,因为 let 只在它所在的代码块生效,也就是说,从大括号结束处开始,i 就不在生效了,那么下面的 console.log(i); 自然就会出现问题。
再看下面这段代码:
console.log(foo);
var foo = 2;
console.log(bar);
let bar = 2;
这段代码中,同样是变量在生命前使用,用 var 声明时会发生变量提升,即变量已声明,但没有值。
let 则表示为在声明之前,变量是不存在的。
let 命令表达了逻辑性更强一点。
let 命令是不允许在相同的作用域内,多次声明同一个变量的:
function func() {
let a = 10;
var a = 1;
}
function func() {
let a = 10;
let a = 1;
}
所以,以上两种写法都会报错。
3.const 命令
const 通常是声明一个常量,但这个常量一旦声明了,就不能再改变了。
const PI = 3.1415;
PI // 3.1415
PI = 3;
上面代码中,在声明常量 const PI = 3.1415;之后,又给 PI 赋了一次值,所以直接就会报错。
同样,用 const 声明一个常量时,必须马上给它初始化,如果留在以后赋值,也会报错。
4.Set 数据结构
Set 类似于数组,但不同的是,Set里面没有相同的值,每一个成员的值都是唯一的。
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
上面的 add()方法向 Set 中添加数据,但输出的时候,会发现并没有输出原数组中重复的值,这就说明,在添加的时候,Set 已经过滤了重复的值。
以上是ES6 中的4 种比较常用的基本语法。