一开始接触Symbol的时候,以为这是在Javascript 中提供了一种Dictionary 的实现方式。
标准文档解释说Symbol 是继 6种基本数据类型:Undefined、Null、Boolean、String、Number、Object 后的第7种 基本类型, Symbol是一个不可变的数据类型,用来产生唯一的标识,但是却无法直接访问这个标识.
Symbol的最基础用法
var mySymbol = Symbol();
也可以为Symbol 创建描述
var mySymbol = Symbol("My Symbol");
Symbol的用途可以作为对象的属性出现, 并且由于Symbol的唯一性,不用担心属性会发生冲突
var o = {
val: 10,
[ Symbol("random") ]: "I'm a symbol",
};
但是必须提醒的是,Symbol在对象中会以特殊的方式存储, 所以下面的方式不可以获取到symbol属性
console.log(Object.getOwnPropertyNames(o)); // val
必须以这种方式
Object.getOwnPropertySymbols(o);
ES6有一个Symbol.iterator,能够指定对象的默认iterator:
var arr = [11,12,13];
var itr = arr[Symbol.iterator]();
itr.next(); // { value: 11, done: false }
itr.next(); // { value: 12, done: false }
itr.next(); // { value: 13, done: false }
itr.next(); // { value: undefined, done: true }
网友评论