由于最近学习Vue,它的语法规范大部分使用的ES6的语法,所以来补充补充ES6知识吧,另外现在很多流行的框架都是基于ES6语法开发的,可知ES6的语法重要性。
变量(let)与常量定义(const)
let的定义和使用
1 | var b =3; |
什么是暂时性死区?1
在一个块级作用域中,使用let/const声明变量时,只要变量还没有声明完成前就使用,就会报错,这就时暂时性死区。
暂时性死区的作用?1
它主要是为了减少运行时错误,防止在声明变量未完成之前使用。
let不允许重复声明
1 | function check(){ |
ES6 明确规定,如果区块中存在let 和 const 命令,这个区块对这些命令声明
的变量,从一开始就形成了封闭作用域,凡是在声明之前就使用这些变量就会报错。
const定义和使用
1 | const Arr = 2; |
变量和对象解构赋值
解构分类:
1.数组解构
2.对象解构
3.字符串解构
4.函数参数解构
什么是解构赋值?
1
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
1 | // 字符串解构-----------字符串会被转换成一个类型数组的对象,每个对象都有length属性 |
解构赋值用途?1
2
3
4
5
61. 交换变量的值
2. 交换变量的值(将它们放在数组或对象里返回)
3. 函数参数的定义
4. 提取 JSON 数据
5. 函数参数的默认值
6. 遍历 Map 结构

进制的转化
1 | 0b---------二进制 |
1 | console.log('10的二进制'+0b10) |
1 | let num = 20; |
字符串模板
1 | let name = '小红'; |
扩展运算符(…)
1 | function long(...arg){ |
扩展运算符的应用
1.复制数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // 以下是错误的复制数组,它只是执向同一份数据的另一个指针,修改a2,a1的值就会发生改变
const a1 = [1, 2];
const a2 = a1;
a2[0] = 2;
a1 // [2, 2]
// 正确的克隆复制数组
// 写法一
//const a2 = [...a1];
// 写法二
const [...a2] = a1;
a2[0] = 22;
console.log(a1) //[1, 2]
console.log(a2) //[22, 2]
2.合并数组
1
2
3
4
5
6
7
8
9
10
11 const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];
// ES5 的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]
// ES6 的合并数组
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]
箭头函数
1 | 箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种只包含一个表达式,连{ ... }和return都省略掉了。 |
使用格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 (参数1, 参数2, …, 参数N) => { 函数声明 }
(参数1, 参数2, …, 参数N) => 表达式(单一)
//相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
// 当只有一个参数时,圆括号是可选的:
(单一参数) => {函数声明}
单一参数 => {函数声明}
// 没有参数的函数应该写成一对圆括号。
() => {函数声明}
//加括号的函数体返回对象字面表达式:
参数=> ({foo: bar})
//支持剩余参数和默认参数
(参数1, 参数2, ...rest) => {函数声明}
(参数1 = 默认值1,参数2, …, 参数N = 默认值N) => {函数声明}
//同样支持参数列表解构
let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
f(); // 6
1 | // 两个参数 |
箭头函数的作用:
更简短的函数并且不绑定this,并且没有自己的this,arguments,super或 new.target。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。
箭头函数使用注意:
1.箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this。
有关this使用的说明
- 箭头函数没有自己的this指针,通过 call() 或 apply() 方法调用一个函数时,只能传递参数(不能绑定this—译者注),他们的第一个参数会被忽略。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20var adder = {
base : 1,
add : function(a) {
var f = v => v + this.base;
return f(a);
},
addThruCall: function(a) {
var f = v => v + this.base;
var b = {
base : 2
};
return f.call(b, a);
}
};
console.log(adder.add(1)); // 输出 2
console.log(adder.addThruCall(1)); // 仍然输出 2(而不是3 ——译者注)
3.箭头函数不能用作构造器,和 new一起用会抛出错误。
4.箭头函数没有prototype属性。
Symbol
什么是Symbol?:
symbol 是一种基本数据类型,
该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册
每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的
Symbol格式:
Symbol([description])
参数:可选的字符串。symbol的描述,可用于调试但不能访问symbol本身
1 | // Symbol 作为常量 |
***
Symbol主要用来作为对象属性的标识符
***
for-of和for-in的区别
在ES6之前,迭代元素都使用for-in去遍历,但是它有一个缺点,就是当你遍历数组时,你只想获取数组的值,它会遍历跟数组
相关的一切属性(除了Array的length属性却不包括在内)!
ES6的出现,for-of大大解决了这一缺点,它只会获取数组的值。
1 | ES6之前 |
1 | //2.for ... of循环则完全修复了这些问题,它只循环集合本身的元素: |
类定义
1 | // 不能用类实例化对象,通过 类.方法 就可以访问该方法 |
setter和getter
1 | // setter/getter 功能相当于----------java中(set和get)设置方法中内容 取得方法中内容 |
类继承
其实JavaScript 和 Java 创建类,继承挺相似的!
1 | class Animal{ |
Set与Map
什么是Set?
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。
1 | //Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。 |
Set 四个方法
add(value):添加某个值,返回Set结构本身
delete(value):删除某个值,返回一个布尔值,表示删除是否成功
has(value):返回一个布尔值,表示该值是否为Set的成员
clear():清除所有成员,没有返回值
1 | mySet.size; // 2 |
Set 结构有四个遍历方法:
1.keys()返回键名的遍历器
2.values()返回键值的遍历器
3.entries()返回键值对的遍历器
4.forEach()使用回调函数遍历每个成员
1 | let set = new Set(['red', 'green', 'blue']); |
什么是Map?
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
1 | //Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。 |
Map结构有四个遍历方法:
1.keys()返回键名的遍历器
2.values()返回键值的遍历器
3.entries()返回键值对的遍历器
以上3个方法都是通过 for(let of )遍历
4.forEach()使用回调函数遍历每个成员
Map结构转数组结构,通过扩展运算符(…)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17const map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);
[...map.keys()]
// [1, 2, 3]
[...map.values()]
// ['one', 'two', 'three']
[...map.entries()]
// [[1,'one'], [2, 'two'], [3, 'three']]
[...map]
// [[1,'one'], [2, 'two'], [3, 'three']]
Map转化为数组结构后,它就可以使用数组的方法,可以实现更多的方法,例如数组的过滤filter……….

以上是关于ES6的知识点,可能不全,但是最常用的,平常遇到不会的知识点,可以去阮一峰 网站去看ES6,特别不错,讲的特别细。
接下来,补充一下JS高级知识,开始Vue,做项目👈
前端爱好者可以加我一起探讨,QQ1325190062


