ES6 Symbol的使用场景

发布于 2022-09-12 04:41:28 字数 161 浏览 26 评论 0

let s=Symbol(); ,这样s就是一个symbol数据了,它是一个独一无二的值,他不是对象,不能添加属性。也不能和其他类型的值进行运算

symbol这个数据类型,总体来说感觉特别抽象特别缥缈,大家在实际开发中,什么场景下会用到它呢?

还有Map 也是同样的疑问。。。。。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

回忆那么伤 2022-09-19 04:41:28

我倒是用过,而且恰巧两个一起用过。
主要是在写一个对安全性有一丢丢要求的回调-订阅实现的时候,要求订阅函数可以取消,但是我觉得像 removeEventListener 这样传入函数去取消不是个好设计(因为大家更喜欢直接写匿名函数作为回调),所以就采用类似 setTimeout 这样返回句柄的方式来定位需要取消的订阅,开始使用递增 ID 作为句柄,但是自增容易被枚举,用大整数 ID 作为句柄的话要防重复,所以就用了 Symbol,大致实现是这样的:

const eventMap = mew Map();
// 注册回调会获得一个句柄
const on = (callback) => {
    const handler = Symbol();
    eventMap.set(handler, callback);
    return handler
};

// 使用上面的句柄,可以撤销对应的订阅
const off = handler => {
    eventMap.delete(handler);
}

当然,这里的 symbol 被传递了,所以其实用任何引用类型的对象都可以代替,但是用 symbol 显得就很专业了。

另外 Symbol 有不少静态方法,除了有一两次用 Symbol.iterator 部署遍历器的经历之外,都没用过,规范也早已忘记。

鹊巢 2022-09-19 04:41:28

找不到应用场景就不找,不用非得硬找。

根据二八原则,80% 的功能只用会用到 20% 的 API。


用 Symbol 的最常见场景就是可以用来模拟私有属性或方法了,弥补了 JS 没有 OOP 语言常见的 privatepublic 这种可见性修饰符的不足。

不过绝大部分 JS 开发者,根本也不写 OOP,你管它什么可见性呢?

非要写带可见性的开发者,早就用上 TS 了,何必用个半残的 Symbol。

倦话 2022-09-19 04:41:28

早期 Redux 推荐的实践中就有吧,用作 Reducer、Action 名称

export const SOME_ACTION = Symbol('some_action')

import { SOME_ACTION } from 'xxxx'

dispatch(SOME_ACTION)
糖果控 2022-09-19 04:41:28

一般场景用不到,基本用 string 当 object key 就够了。

你需要用到的是 well-known 的symbol (内置的symbol),用于实现内置的一些 hook,类似 js 里的接口的感觉。https://developer.mozilla.org...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文