前言: 本文中所有api及语法糖均是基于阮一峰老师的ES6标准入门(第三版)做的汇总及扩展。
let 和 const命令
let 命令
- 描述: 新增let命令,用于声明变量,用法类似于var。但声明的变量只在let所在的代码块内有效。
1
2
3
4
5
6{
let a = 10;
var b = 20;
}
a // Uncaught ReferenceError: a is not defined
b // 20
不存在变量提升,不允许重复声明
var 命令会发生变量提升,及变量在声明之前使用,值为undefined。let命令纠正了这种现象,let声明的变量一定要在声明之后使用,不然会报错。
1
2
3
4console.log(a) // ReferenceError: a is not defined
console.log(b) // undefined
var b = 3不允许重复定义
1
2
3let a = '123'
a // '123'
let a = '456' // 报错 Uncaught SyntaxError: Identifier 'a' has already been declared
块级作用域
在es5中,只有函数作用域和全局作用域,全局作用域导致部分场景下的变量污染或变量覆盖。
1
2
3
4
5
6
7
8
9
10var tmp = new Date();
function f() {
console.log(tmp);
if (false) {
var tmp = 'hello world';
}
}
f(); // undefinedes6增加了块级作用域及允许块级作用域的任意嵌套
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
{{{{
let insane = 'Hello World';
{
let insane = 'Hello Cinaiet'
console.log(insane) // Hello Cinaiet
}
console.log(insane) // Hello World
}}}}
}
const 命令
const 声明一个只读的变量,一旦声明,常量的值就不能改变。
1
2
3
4const PI = 3.1415;
PI // 3.1415
PI = 3; // TypeError: Assignment to constant variable.本质
const 实际并不是变量的值不可改,而是变量指向的内存地址所保存的数据不可更改。ES6 声明变量的六种方法
- var
- function
- let
- const
- import
- class
变量的解构析构
解构
允许按照一定的模式从数组或是对象中提取某个值,然后对变量进行赋值
以前,为变量赋值,只能直接指定值。1
2
3let a = 1;
let b = 2;
let c = 3;
ES6 允许写成下面这样。
1 | let [a, b, c] = [1, 2, 3]; |
允许指定默认值,也可以解构赋值
1 | let [foo = true] = [] |
字符串的扩展
includes(), startsWith(), endsWith()
传统上,Js只有indexOf 方法,用来确定一个字符串中是否包含在另一个字符串中。ES6又提供了三种新方法。
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
1 | let aaa = 'hello Cinaiet' |
repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次。
1 | 'x'.repeat(3) // 'xxx' |
模板字符串
相较于传统的模板字符串,使得模板更加简洁便利1
2
3
4
5
6
7
8
9
10
11
12
13
14// 传统模板
$('#result').append(
'There are <b>' + basket.count + '</b> ' +
'items in your basket, ' +
'<em>' + basket.onSale +
'</em> are on sale!'
);
// ES6模板字符串
$('#result').append(`
There are <b>${basket.count}</b> items
in your basket, <em>${basket.onSale}</em>
are on sale!
`);
未完待续