暂时性死区
ES6明确规定,如果区块中存在let和const命令(class也类似),这个区块对这些命令声明的变量,从一开始时就形成了封闭作用域,那么这就会导致——凡是在声明之前就使用了这些变量,就会报错(抛出错误:ReferenceError: Cannot access 'xxxx' before initialization
)。
总结起来就是一个原则:先声明,后使用,且不存在变量声明提升。
Symbol标识符
Symbol 本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。
注意事项
- Symbol值不能与其他类型的值进行运算
- Symbol 值不可以和其他类型值进行混合运算,否则会报错
- Symbol 值如果想要作为属性名,那就不能再用点运算符,因为点运算符后面跟的总是字符串
- 在对象内部使用Symbol 值作为属性名的时候,必须要将值放在方括号中
Map对象
Map对象存有键值对,其中的键可以是任何数据类型。
Map对象记得键的原始插入顺序。
Map对象具有表示映射大小的属性。Map对象的基本方法
| 方法 | 描述 | | —- | —- | | new Map() | 创建新的Map对象 | | set() | 向Map对象中的键设置值 | | get() | 获取Map对象中键的值 | | entries() | 返回Map对象中键值对的数组 | | keys() | 返回Map对象中键的数组 | | values() | 返回Map对象中值的数组 | | clear() | 删除Map对象中的所有元素 | | delete() | 删除Map对象中指定键的键值 | | has() | 如果Map对象中存在对应键,返回true,否则返回false | | forEach() | 为Map对象中每个键值对调用回调 |
Map对象的属性
属性 | 描述 |
---|---|
size | 获取Map对象的元素数量 |
实例
创建Map对象
// 创建对象
const apples = {name: 'Apples'};
const bananas = {name: 'Bananas'};
const oranges = {name: 'Oranges'};
// 创建新的 Map
const fruits = new Map();
// Add new Elements to the Map
fruits.set(apples, 500);
fruits.set(bananas, 300);
fruits.set(oranges, 200);