symbol笔记

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

var mySymbol = Symbol();

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

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

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

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

Object.getOwnPropertyNames,Object.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) 就是调用 myArraySymbol.iterator返回一个迭代器

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

推荐阅读更多精彩内容

  • Symbol是为了解决属性名冲突的问题而引入的,想要创建不会冲突的属性,可以new一个Symbol,每个创建的Sy...
    yangweigbh阅读 2,726评论 0 50
  • const命令: 声明一个只读常量,一旦声明,声明的值就不能改变 声明的常量和let一样,不可重复声明 本...
    菜菜的小菜鸟阅读 3,538评论 0 0
  • CSS CSS3 布局属性 标签的权值为1,类选择符的权值为10,ID选择符的权值最高为100 !importan...
    53cfdb355418阅读 3,255评论 0 0
  • let 和 const 循环语句中,每次循环都会创建一个新的代码块作用域 var a = [];for (let ...
    _于曼丽_阅读 1,547评论 0 0
  • JavaScript 编码规范(草案) 该规范改编自 Airbnb JavaScript Style Guide[...
    暖lily阅读 2,875评论 0 0