ES6 Symbol的使用场景
let s=Symbol(); ,这样s就是一个symbol数据了,它是一个独一无二的值,他不是对象,不能添加属性。也不能和其他类型的值进行运算
symbol这个数据类型,总体来说感觉特别抽象特别缥缈,大家在实际开发中,什么场景下会用到它呢?
还有Map 也是同样的疑问。。。。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我倒是用过,而且恰巧两个一起用过。
主要是在写一个对安全性有一丢丢要求的回调-订阅实现的时候,要求订阅函数可以取消,但是我觉得像
removeEventListener
这样传入函数去取消不是个好设计(因为大家更喜欢直接写匿名函数作为回调),所以就采用类似setTimeout
这样返回句柄的方式来定位需要取消的订阅,开始使用递增ID
作为句柄,但是自增容易被枚举,用大整数ID
作为句柄的话要防重复,所以就用了Symbol
,大致实现是这样的:当然,这里的
symbol
被传递了,所以其实用任何引用类型的对象都可以代替,但是用symbol
显得就很专业了。另外
Symbol
有不少静态方法,除了有一两次用Symbol.iterator
部署遍历器的经历之外,都没用过,规范也早已忘记。找不到应用场景就不找,不用非得硬找。
根据二八原则,80% 的功能只用会用到 20% 的 API。
用 Symbol 的最常见场景就是可以用来模拟私有属性或方法了,弥补了 JS 没有 OOP 语言常见的
private
、public
这种可见性修饰符的不足。不过绝大部分 JS 开发者,根本也不写 OOP,你管它什么可见性呢?
非要写带可见性的开发者,早就用上 TS 了,何必用个半残的 Symbol。
早期 Redux 推荐的实践中就有吧,用作 Reducer、Action 名称
一般场景用不到,基本用 string 当 object key 就够了。
你需要用到的是 well-known 的symbol (内置的symbol),用于实现内置的一些 hook,类似 js 里的接口的感觉。https://developer.mozilla.org...