ES6

Symbol

Symbol解决什么问题

ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。

基本语法

一种新的数据类型

Symbol是es6引入的一种新的数据类型,表示 独一无二的值 。至此js共有7种数据类型,其中值类型为:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、符号(Symbol)和引用类型:对象(Object)。

生成唯一的Symbol值

执行Symbol([description])函数可以生成一个与其他Symbol值互不相等的独一无二的Symbol值

const sym = Symbol() // Symbol()
const symWithNumber = Symbol(3.14) // Symbol(3.14)
const symWithObject = Symbol({foo:'bar'}) // Symbol([object,object])

其中Symbol()函数接受一个可选的除Symbol值以外的值作为对该Symbol值的描述。这个描述值仅仅起到描述的作用,而不会对Symbol值本身产生任何影响。

const symWithSymbol = Symbol(sym) // TypeError: Cannot convert a Symbol value to a string
const sym1 = Symbol('foo')
const sym2 = Symbol('foo')
sym1 === sym2 // false

Symbol()函数不是一个构造函数,前面不能加new关键字,否则会报错

new Symbol() // TypeError: Symbol is not a constructor
我来评几句
登录后评论

已发表评论数()

相关站点

热门文章