ES6中的新特性 Symbol

一开始接触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 }

你可能感兴趣的:(ES6中的新特性 Symbol)