暂时性死区

ES6明确规定,如果区块中存在let和const命令(class也类似),这个区块对这些命令声明的变量,从一开始时就形成了封闭作用域,那么这就会导致——凡是在声明之前就使用了这些变量,就会报错(抛出错误:ReferenceError: Cannot access 'xxxx' before initialization)。
总结起来就是一个原则:先声明,后使用,且不存在变量声明提升。

Symbol标识符

Symbol 本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或覆盖你设置的属性值。
注意事项

  1. Symbol值不能与其他类型的值进行运算
  2. Symbol 值不可以和其他类型值进行混合运算,否则会报错
  3. Symbol 值如果想要作为属性名,那就不能再用点运算符,因为点运算符后面跟的总是字符串
  4. 在对象内部使用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对象

  1. // 创建对象
  2. const apples = {name: 'Apples'};
  3. const bananas = {name: 'Bananas'};
  4. const oranges = {name: 'Oranges'};
  5. // 创建新的 Map
  6. const fruits = new Map();
  7. // Add new Elements to the Map
  8. fruits.set(apples, 500);
  9. fruits.set(bananas, 300);
  10. fruits.set(oranges, 200);