Javascript ES6中是否有命名符号的约定?
我在玩ES6,看符号。与ruby不同,例如,在ruby中,您可以编写Javascript ES6中是否有命名符号的约定?,javascript,symbols,ecmascript-6,Javascript,Symbols,Ecmascript 6,我在玩ES6,看符号。与ruby不同,例如,在ruby中,您可以编写:symbol,ES6符号似乎可以用于任何“标准”变量名。老实说,我发现这相当令人困惑: var privateProperty = Symbol(); var obj = {}; obj[privateProperty] = 'some value goes here'; 因为它往往让我认为,privateProperty可能是一个简单的字符串,就像几年前一样。使用:privateProperty无效 因此,就像对jQuer
:symbol
,ES6符号似乎可以用于任何“标准”变量名。老实说,我发现这相当令人困惑:
var privateProperty = Symbol();
var obj = {};
obj[privateProperty] = 'some value goes here';
因为它往往让我认为,privateProperty
可能是一个简单的字符串,就像几年前一样。使用:privateProperty
无效
因此,就像对jQuery对象使用$bar
或对RxJS/Bacon流使用bar$
一样,我想知道ES6中是否已经有了命名符号的约定
obj[privateProperty]=
让我觉得privateProperty
很可能是一个简单的字符串,就像几年前一样
嗯,这是我们需要忘记的旧想法privateProperty
是一个键,可以是字符串(属性名称)或符号。类似地,我们已经学会了区分(整数)索引和“正常”属性
ES6似乎允许任何“标准”变量名
就像鲁比一样。区别在于ES6没有为符号引入文字符号(解析为同一事物),而是允许仅通过使用Symbol
(本地)或Symbol.for
(全局)创建符号
对于包含符号值的变量命名,没有标准约定。当然,如果您倾向于使用此类类型注释,则始终可以使用。如果我必须创造一个标准,我会建议使用更微妙的前导下划线(
var\u myPrivate
)。属性名称中的下划线总是暗示着一些特殊的东西,对于计算属性键(obj[\u myPrivate]
),它看起来很相似
ES6中是否有命名符号的约定
虽然没有命名符号持有变量的约定(但),但符号本身的命名肯定有约定:
- 本地符号应该有一个非常描述性的描述符字符串(作为
的参数提供)。当然,它们仍然是唯一的,所以你基本上可以使用任何你想要的名字Symbol
- 全局符号需要避免冲突。约定是适当地命名它们的名称空间,并用点连接这些名称空间名称,就像Java包名称一样。如果符号作为全局变量可用,则其描述符应具有相同的名称(类似于内置的本机符号,类似于
)。如果符号由模块或库导出,则其描述符应以模块/库名称作为前缀(以避免冲突)@@iterator=symbol.for(“symbol.iterator”);
最好对变量使用相同的名称(就像本机符号一样,
Symbol.iterator.toString()=“Symbol(Symbol.iterator)”
)。符号只是一个值。指定给它的变量不是它的名称。变量只是值的容器,就像任何其他值(数字、字符串、对象等)一样。我知道,我的示例只是误导性的编辑。更改变量名称实际上没有任何区别。持有符号引用的变量怎么办?有时我将它们存储在对象中,但有时也存储在不同的变量中。在我自己的代码中,当函数必须具有相同的名称时,可能会出现名称冲突。我倾向于用大写字母写这些变量:constmap=Symbol(“MAP”)
,但我不确定。哦,符号是不可变的。@IvenMarquardt正如我所说,它们也没有约定。在大小写中使用大写名称可能更多是因为它是一个常量,而较少是因为它包含一个符号。