ES6 笔记 Symbol

Symbol是为了解决属性名冲突的问题而引入的,想要创建不会冲突的属性,可以new一个Symbol,每个创建的Symbol是独一无二的,不会冲突

var mySymbol = Symbol();

obj[mySymbol] = "ok!";  // called symbol-keyed property, guaranteed not to collide
console.log(obj[mySymbol]);  // ok!
  • 可以创建具有descriptionSymboldescription会在toString时打印出来

  • symbol-keyed property不能使用点号引用,需要使用方括号引用。

  • get 和 set symbol keyed property: element[Symbol]
    检查有没有属性: if (Symbol in element)
    删除属性: delete element[Symbol]

  • Symbol 离开作用域,这个属性就没法引用了

  • Object.getOwnPropertyNamesObject.keys(obj)不会返回Symbol keyed property。 Object.getOwnPropertySymbols(obj)返回symbol-keyed property。

Symbol是单独的类型,Symbol不会自动转换成字符串,必须显示调用toString()

> typeof Symbol()
"symbol"

有三类Symbol

  • Symbol创建的新的Symbol

  • Symbol.for(string) 重复返回统一Symbol

  • 标准里定义的Symbol,比如Symbol.iterator

for (var item of myArray) 就是调用 myArray[Symbol.iterator]()返回一个迭代器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回忆一下JS中的原始类型:字符串型、数字型、布尔型、null和undefined。 ES6中引入了第6种原始类型:...
    ___Jing___阅读 12,783评论 2 10
  • 前面的话 ES5中包含5种原始类型:字符串、数字、布尔值、null和undefined。ES6引入了第6种原始类型...
    CodeMT阅读 3,923评论 0 1
  • 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加...
    oWSQo阅读 3,505评论 1 3
  • 基本概念 Symbol:表示独一无二的值,属于类字符串数据类型,本质上可以当字符串来用。 基本用法 Symbol是...
    前白阅读 2,870评论 0 1
  • { "Unterminated string literal.": "未终止的字符串文本。", "Identifi...
    Elbert_Z阅读 13,700评论 0 2