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 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、ES6简介 ​ 历时将近6年的时间来制定的新 ECMAScript 标准 ECMAScript 6(亦称 ...
    一岁一枯荣_阅读 6,212评论 8 25
  • 1.概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象...
    赵然228阅读 892评论 2 10
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,557评论 6 13
  • 妈妈在睡觉... 我在陪姥姥聊天... 妈妈嫌姥姥唠叨... 姥姥嫌妈妈觉多... 妈妈: 你怎么还不出门... ...
    9ea80b401870阅读 352评论 0 0
  • 4月初参加了一期写作班,兴致勃勃,原以为可以借此有质的提升。 结果,一开课,就陷在婆媳问题、夫妻关系中,没有心力再...
    锵锵滚阅读 413评论 1 4

友情链接更多精彩内容