gpt4 book ai didi

javascript - ES2015 符号是否适合代替字符串作为唯一常量值?

转载 作者:行者123 更新时间:2023-11-29 16:41:25 24 4
gpt4 key购买 nike

我知道 ES2015 中添加了符号,但没有阅读太多相关内容。我现在已经读了一些书,他们的目的显然不是我想象的那样。似乎预期的目的是提供一种创建私有(private)属性的方法。我的理解是它类似于某些函数式语言中的原子,它被备份here 。我觉得奇怪的是,它完全没有提及我错误地假设的主要原因,即为模式匹配提供了一个更有意义的字符串替代方案:

export const FOO = 'This value is irrelevant as long as its unique';
// or
export const FOO = Symbol('A sensible description of what foo represents');

switch(blah):
case FOO: do_something();
...

在上述情况下,使用 Symbol 似乎有很多优点,因为它可以防止意外冲突(即使两个常量等于同一个字符串),消除了每次都提供唯一字符串的负担,并提供了向任何阅读代码的人明确指示其预期目的。最后一个考虑因素在某种程度上依赖于其他人是否同意我对符号用途的解释。

无论如何,问题是,这是符号的一个很好的用例吗?如果不是,为什么不呢?

最佳答案

It seems the intended purpose is to provide a way of creating private attributes.

不,一点也不。非常非常早,这就是一个激励因素,但在规范完成之前很久就被放弃了。如果它们旨在提供某种隐私,我们就不会Object.getOwnPropertySymbols .

私有(private)实例信息经历了一条漫长而曲折的道路,并且仍在蜿蜒前行;目前它是 Class Fields proposal 的一部分(以前是它自己的事情)。

Anyway the question is, is this a good use case for Symbols and if not why not?

是的。 Symbol 的主要目的之一是提供不冲突的唯一标识符。

来自§4.3.25 - Symbol value :

primitive value that represents a unique, non-String Object property key

来自 §6.1.5 - The Symbol Type :

Each possible Symbol value is unique and immutable.

当然,这并不能说明动机,但它具有指示性。

关于javascript - ES2015 符号是否适合代替字符串作为唯一常量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45345294/

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