ES6教程
简介
ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。
let 与const
ES6新增加俩个重要的关键字:let和const
let命令
代码块内有效
{
let a = 0;
a // 0
}
a // 报错 ReferenceError: a is not defined
不能重复声明
let a = 1;
let a = 2;
var b = 3;
var b = 4;
a // Identifier 'a' has already been declared
b // 4
for 循环计数器很适合用 let
for (var i = 0; i < 10; i++) {
setTimeout(function(){
console.log(i);
})
}
// 输出十个 10
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
// 输出 0123456789
不存在变量的提升
console.log(a); //ReferenceError: a is not defined
let a = "apple";
console.log(b); //undefined
var b = "banana";
const命令
const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。
const PI = "3.1415926";
PI // 3.1415926
const MY_AGE; // SyntaxError: Missing initializer in const declaration
就近原则
var PI = "a";
if(true){
console.log(PI); // Cannot access 'PI' before initialization
const PI = "3.1415926";
}
var PI = "a";
if(true){
const PI = "3.1415926";
console.log(PI); // 3.1415926
}
解构赋值
解构赋值是对赋值运算符的扩展。
他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。
数组的解构
基本
let [a,b,c] = [1,2,3]
可嵌套
let [a, [[b], c]] = [1, [[2], 3]];
可忽略
let [a, , b] = [1, 2, 3];
不完全解构
let [a = 1, b] = [];
…运算符
let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]
解构默认值
let [a = 2] = [undefined]; // a = 2
字符串
let [a, b, c, d, e] = 'hello';
// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'
对象模型的解构
基本
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;