1、强制申明变量
在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。
启用strict模式的方法是在JavaScript代码的第一行写上:'use strict';
2、多行字符串
反引号 ` ... ` 表示,替换
--换行
3、模板字符串
${varName},替换+--连接字符串
1 'use strict'; 2 var name = '小明'; 3 var age = 20; 4 var message = `你好, ${name}, 你今年${age}岁了!`; 5 alert(message);
注意:使用模板字符串在反引号里面
4、新的数据类型 Map 和 Set
解决问题:JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的
Map:是一组键值对的结构,具有极快的查找速度
1 var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); 2 m.get('Michael');
初始化Map
需要一个二维数组,或者直接初始化一个空Map
1 var m = new Map(); // 空Map 2 m.set('Adam', 67); // 添加新的key-value 3 m.set('Bob', 59); 4 m.has('Adam'); // 是否存在key 'Adam': true 5 m.get('Adam'); // 67 6 m.delete('Adam'); // 删除key 'Adam' 7 m.get('Adam'); // undefined
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉
Set:Set
和Map
类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set
中,没有重复的key。
要创建一个Set
,需要提供一个Array
作为输入,或者直接创建一个空Set
1 var s1 = new Set(); // 空Set 2 var s2 = new Set([1, 2, 3]); // 含1, 2, 3
重复元素在Set
中自动被过滤
add(key):添加元素到Set
中,可以重复添加,但不会有效果
delete(key):删除元素
iterable
遍历Array
可以采用下标循环,遍历Map
和Set
就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable
类型,Array
、Map
和Set
都属于iterable
类型。
具有iterable
类型的集合可以通过新的for ... of
循环来遍历
1 'use strict'; 2 var a = [1, 2, 3]; 3 for (var x of a) { 4 } 5 console.log('你的浏览器支持for ... of');
用for ... of
循环遍历集合,用法如下:
1 var a = ['A', 'B', 'C']; 2 var s = new Set(['A', 'B', 'C']); 3 var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); 4 for (var x of a) { // 遍历Array 5 console.log(x); 6 } 7 for (var x of s) { // 遍历Set 8 console.log(x); 9 } 10 for (var x of m) { // 遍历Map 11 console.log(x[0] + '=' + x[1]); 12 }
for ... in 与 for ... of 区别
for ... in
遍历的实际上是对象的属性名称。一个Array
数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
当我们手动给Array
对象添加了额外的属性后,for ... in
循环将带来意想不到的意外效果。
1 var a = ['A', 'B', 'C']; 2 a.name = 'Hello'; 3 for (var x in a) { 4 console.log(x); // '0', '1', '2', 'name' 5 }
for ... in
循环将把name
包括在内,但Array
的length
属性却不包括在内。
for ... of
循环则完全修复了这些问题,它只循环集合本身的元素。
5、ES6引入rest参数,(arguments--指向调用者传进来的所有参数)
1 //格式 2 function(...rest); 3 function(a,b,...rest);