gpt4 book ai didi

javascript - Symbol数据类型的应用

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:21 25 4
gpt4 key购买 nike

我试图弄清楚自己,但没有成功。我想知道不可变数据类型 Symbol 是否有有效的应用程序。

有人知道吗?

最佳答案

符号的优点是它们是唯一的并且不能与另一个实例冲突(假设您没有使用全局符号注册表)。这对于库对象的模块化、对象代理和向前兼容扩展非常重要。

考虑以下场景:您为浏览器编写代码。您修改 HTMLElement 的原型(prototype),为您的库添加新属性。现在,whatwg/w3c 出现了,并向标准添加了一个同名的属性。突然间,您的库与网络标准发生了冲突。

当您对库方法进行子类化时,也会发生类似的情况。导入新版本的库,它突然可能会出现与您的方法冲突的新方法。

符号不会发生这种情况,因为您首先实例化一个新的自定义本地符号,该符号不会与其他任何符号发生冲突。然后您可以将其用作不会与任何第三方代码冲突的 key 。

使用模块,您可以简单地将模块的符号导出为常量,使其他模块可以访问它们,但只能通过适当的、基于模块的命名空间,再次避免冲突。

类还可以使用它们来表示符合某些接口(interface)(因为 javascript 没有多重继承或接口(interface)),例如 Symbol.iterator这样做不会冒名称冲突的风险,也不必妥协自己的方法名称。

此外,它们还可以用作函数参数,以避免魔术字符串常量,当它们与同一参数中的常规字符串处理混合时,这会特别危险。更不用说未声明的符号(通常作为常量导入)可能会导致比传入未知字符串并简单地落入方法内的特殊情况更可预测的错误。

它们还可能提供性能优势,因为与符号的比较基本上是 O(1) 指针比较而不是字符串比较。至少在编译器无法推断字符串常量相同的情况下。

关于javascript - Symbol数据类型的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28432131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com