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返回一个迭代器

作者:爱编程的胡图图
链接:https://www.jianshu.com/p/8b32763c60c4
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

相关阅读更多精彩内容

  • Symbol是为了解决属性名冲突的问题而引入的,想要创建不会冲突的属性,可以new一个Symbol,每个创建的Sy...
    爱编程的胡图图阅读 1,130评论 0 0
  • Symbol是为了解决属性名冲突的问题而引入的,想要创建不会冲突的属性,可以new一个Symbol,每个创建的Sy...
    yangweigbh阅读 2,773评论 0 50
  • 前面的话 ES5中包含5种原始类型:字符串、数字、布尔值、null和undefined。ES6引入了第6种原始类型...
    CodeMT阅读 3,945评论 0 1
  • 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加...
    oWSQo阅读 3,550评论 1 3
  • 1.概述 在ES5之前 数据类型只有六种 是: undefined ,Object, null,Number,St...
    黑云阅读 1,319评论 0 2

友情链接更多精彩内容