一、简介
ES6,全程ECMAScript6.0,是JavaScript的下一个版本标准。
ES6主要是为了解决ES5中的先天不足,比如JavaSript中没有类的概念。
二、基本内容
1、let命令
与var生命的变量不同,let声明的变量只在所在的代码块内有效。
{
let a = 0;
var b = 0;
a // 0
b // 0
}
a // 报错ReferenceError: a is not defined
b // 0
且let声明的变量只能声明一次,而var则可以声明多次
let a = 1;
let a = 2;
var b = 3;
var b = 4;
a // Identifier 'a' has already been declared
b // 4
let不存在变量提升,而var会变量提升
console.log(a); // ReferenceError: a is not defined
let a = "apple";
//let不存在变量提升,声明a之前不存在,所以报错
console.log(b); // undefined
var b = "banana"; //var存在变量提升,开始运行时b已经存在,但还未赋值,所以输出undefined
2、const命令
const声明一个只读变量,声明之后不允许更改 ++(指向变量的内存地址所保存的数据)++。所以声明时必须初始化,否则会报错。
const PI = "3.1415926";
PI // 3.1415926
const MY_AGE; // SyntaxError: Missing initializer in const declaration
在ES6中规定,代码块中如果存在let或者const,代码块会对这些命令声明的变量从块开始就形成一个封闭区域。在代码块内,在声明变量之前使用它会报错
var PI = "a";
if(ture){
console.log(PI); // ReferenceError: PI is not defined
const PI = "3.1415926";
}
3.解构赋值
概述
解构赋值时对赋值运算符的扩展,针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。在代码书写上更加简洁易懂,方便复杂对象中数据字段的获取。
解构模型
结构分为两部分:解构表达式右边的解构的源、结构表达式右边的机构的目标
数组模型的解构
//基本
let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3
//嵌套
let [a, [[b], c]] = [1 , [[2], 3]];
// a = 1
// b = 2
// c = 3
//可忽略
let [a, , b] = [1, 2, 3];
// a = 1;
// b = 3;
//不完全解构
let [a = 1, b] = []; // a = 1; b = undefind;
//剩余运算符
let [a, ...b] = [1, 2, 3];
// a = 1
// b = [2, 3]
//字符串等
//在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。
let [a, b, c, d, e] = 'hello';
// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'
//解构默认值
//当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。
let [a = 2] = [undefined]; // a = 2
let [a = 3, b = a] = []; // a = 3, b = 3
let [a = 3, b = a] = [1]; // a = 1, b = 1
let [a = 3, b = a] = [1, 2]; // a = 1, b = 2
对象模型的解构
//基本
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
// foo = 'aaa'
// bar = 'bbb'
let { baz : foo } = { baz : 'ddd' };
// foo = 'ddd'
//可嵌套可忽略
let obj = { p: ['hello', {y: 'world'}] };
let { p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = { p: ['hello', {y: 'world'}] };
let { p: [x, { }] } = obj;
// x = 'hello'
//不完全解构
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = 'world'
//剩余运算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}
//解构默认值
let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;