这里写目录标题
前言
本篇笔记 JS 语言基础 第三篇。
主要内容有:
- ES6 新增简单数据类型 Symbol;
- 复杂数据类型 Object。
一、Symbol类型(ES6新增)
符号是原始值,且是唯一不可变的。它的用途就是确保对象属性使用唯一标识符,不会发生属性冲突的危险。它并不是为了提供私有属性的行为才增加的,相反,符号就是用来创建唯一记号,进而用作非字符串形式的对象属性。
(1)基本用法
- 使用 Symbol() 函数初始化。
let sym = Symbol();
- 调用 Symbol() 函数时,可以传入一个字符串参数作为对符号的描述,但是,这个字符串参数与符号定义或标识完全无关。
let sym = Symbol('foo');
let otherSym = Symbol('foo');
console.log(sym == otherSym); // false
- 符号没有字面量(一般固定值称为字面量,类似
let num = 123;
,123 即为字面量)语法,这也是关键。
你只需要创建 Symbol() 实例并将其用作对象的新属性,就可以保证它不会覆盖已有的对象属性。
let sym = Symbol();
let otherSym = Symbol('foo');
console.log(sym, otherSym); // Symbol() Symbol(foo)
- Symbol() 函数不能用作构造函数,即不能与 new 关键字一起使用。
let sym = new Symbol();
console.log(sym); // Uncaught TypeError: Symbol is not a constructor
如果想要使用符号包装对象,可以借用 Object() 函数:
let sym = Symbol();
let objSym = Object(sym);
console.log(typeof objSym); // Object
(2)使用全局符号注册表
如果运行时的不同部分需要共享和重用符号实例,则可以用一个字符串作为键,在全局符号注册表中创建并重用符号。这样需要使用 Symbol.for() 方法:
let fooSym = Symbol.for('foo'); // 创建新符号
let otherSym = Symbol.for('foo'); // 重用已有符号
consol