Symbol是一种互不等价的标志,即两个Symbol值都不相等。
可以利用symbol值互不等价特性来实现属性操作的互不打扰。
1.生成唯一的Symbol值
symbol所得到的是一个symbol值,同时可以为symbol值添加一个描述。
Symbol()函数可以生成一个与其他Symbol值互不等价的的Symbol值,可以接受除Symbol值以外的值作为该Symbol值的描述。
2.描述相同的symbol值不等价
描述对Symbol值本身不起任何改变作用。两个具有相同描述值的Symbol值不具有等价性。
3.symbol是值类型
Symbol是一种值类型而不是引用类型,
值类型:将Symbol值作为函数形参进行传递,将会进行复制值传递而非引用传递。
4.注册全局可用的Symbol
允许开发者在当前运行时中定义一些具有全局有效性的Symbol。
通过key值向当前运行时注册一个需要在其他程序中使用的Symbol。
Symbol.for([key]);
如果key被注册过会返回一个与第一次使用所创建的Symbol值等价的Symbol值。
还可以根据全局Symbol获取到对应的key值。
5.常用Symbol值
①Symbol.iterator
定义可迭代对象
②Symbol.hasInstance
扩展instanceof语句内部逻辑权限
③Symbol.match
为正则表达式提供自定义入口。
④Symbol.unscopables
⑤Symbol.toPrimitive
用于将引用类型的对象转换为值类型。
⑥Symbol.toStringTag
当某对象的toString()方法被调用时所返回的Tag内容是什么。