ES2015 符号是否适合作为唯一常量值代替字符串?
Are ES2015 Symbols appropriate in place of Strings as unique constant values?
我知道 Symbols 已经被添加到 ES2015 中,但没有深入了解它们。我现在读了一些书,他们的目的显然不是我想的那样。似乎预期的目的是提供一种创建私有属性的方法。我的理解是,它类似于一些函数式语言中的原子,它被备份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 似乎有许多优点,因为它可以防止意外冲突(即使两个常量等于同一个字符串),消除了每次都想出唯一字符串的负担,并且向阅读代码的任何人提供有关其预期目的的明确指示。最后一个考虑在某种程度上依赖于其他人同意我对 Symbol 应该用于什么的解释。
不管怎样,问题是,这是 Symbols 的一个很好的用例吗?如果不是,为什么不呢?
It seems the intended purpose is to provide a way of creating private attributes.
不,一点也不。非常非常早的时候,这是一个动机,但在规范完成之前很久就被抛弃了。如果它们是为了提供某种隐私,我们就不会有 Object.getOwnPropertySymbols
。
私有实例信息经历了漫长而曲折的道路,并且仍在蜿蜒前行;目前它是 Class Fields proposal 的一部分(以前是它自己的东西)。
Anyway the question is, is this a good use case for Symbols and if not why not?
是的。 Symbol 的主要目的之一是提供唯一的标识符而不会发生冲突。
primitive value that represents a unique, non-String Object property key
Each possible Symbol value is unique and immutable.
虽然这并不能说明动机,但它具有指示性。
我知道 Symbols 已经被添加到 ES2015 中,但没有深入了解它们。我现在读了一些书,他们的目的显然不是我想的那样。似乎预期的目的是提供一种创建私有属性的方法。我的理解是,它类似于一些函数式语言中的原子,它被备份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 似乎有许多优点,因为它可以防止意外冲突(即使两个常量等于同一个字符串),消除了每次都想出唯一字符串的负担,并且向阅读代码的任何人提供有关其预期目的的明确指示。最后一个考虑在某种程度上依赖于其他人同意我对 Symbol 应该用于什么的解释。
不管怎样,问题是,这是 Symbols 的一个很好的用例吗?如果不是,为什么不呢?
It seems the intended purpose is to provide a way of creating private attributes.
不,一点也不。非常非常早的时候,这是一个动机,但在规范完成之前很久就被抛弃了。如果它们是为了提供某种隐私,我们就不会有 Object.getOwnPropertySymbols
。
私有实例信息经历了漫长而曲折的道路,并且仍在蜿蜒前行;目前它是 Class Fields proposal 的一部分(以前是它自己的东西)。
Anyway the question is, is this a good use case for Symbols and if not why not?
是的。 Symbol 的主要目的之一是提供唯一的标识符而不会发生冲突。
primitive value that represents a unique, non-String Object property key
Each possible Symbol value is unique and immutable.
虽然这并不能说明动机,但它具有指示性。