Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES2015符号是否适合代替字符串作为唯一常量值?_Javascript_Ecmascript 6_Pattern Matching_Symbols - Fatal编程技术网

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

Javascript ES2015符号是否适合代替字符串作为唯一常量值?,javascript,ecmascript-6,pattern-matching,symbols,Javascript,Ecmascript 6,Pattern Matching,Symbols,我知道ES2015中增加了符号,但没有读到太多关于它们的内容。我现在读了一些书,他们的目的显然不是我所想的。似乎其目的是提供一种创建私有属性的方法。我的理解是,它类似于某些函数式语言中的atom,它是备份的。我觉得奇怪的是,它完全没有提到我曾经错误地认为它们的主要原因是什么,这是因为它为模式匹配提供了一个更有意义的字符串替代方案: export const FOO = 'This value is irrelevant as long as its unique'; // or export c

我知道ES2015中增加了符号,但没有读到太多关于它们的内容。我现在读了一些书,他们的目的显然不是我所想的。似乎其目的是提供一种创建私有属性的方法。我的理解是,它类似于某些函数式语言中的atom,它是备份的。我觉得奇怪的是,它完全没有提到我曾经错误地认为它们的主要原因是什么,这是因为它为模式匹配提供了一个更有意义的字符串替代方案:

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();
    ...
在上述情况下,使用符号似乎有许多优点,因为它可以防止意外碰撞(即使两个常量等于同一个字符串),消除了每次使用唯一字符串的负担,并为阅读代码的任何人提供了有关其预期用途的明确指示。最后一个考虑在某种程度上取决于其他人同意我对符号应该用于什么的解释

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

似乎其目的是提供一种创建私有属性的方法

不,一点也不。非常非常早的时候,这是一个激励因素,但在规范完成之前很久,它就被丢弃了。如果他们想提供某种隐私,我们就不会有

私人实例信息经历了漫长而痛苦的过程,并且仍在曲折中前进;目前它是(以前是它自己的东西)的一部分

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

对。符号的主要用途之一是提供唯一的标识符,而不会发生冲突

发件人:

表示唯一的非字符串对象属性键的基元值

和来自:

每个可能的符号值都是唯一且不可变的


当然,这与动机无关,但它是指示性的。

我认为理解符号的人之间不会有任何分歧。这只是一个独特的代币,可以随意用作财产。谢谢,我很高兴知道我的理由是金钱!