我正在玩ES6,看着符号。与红宝石不同,例如你写:symbol
,ES6符号似乎被允许任何"标准"变量名。说实话,我觉得这很混乱:
var privateProperty = Symbol();
var obj = {};
obj[privateProperty] = 'some value goes here';
因为它倾向于让我认为privateProperty
可能是像前几年一样的简单字符串。使用:privateProperty
无效。
就像将$bar
用于jQuery对象或bar$
用于RxJS / Bacon流一样,我想知道是否已经建立了在ES6中命名符号的约定?
答案 0 :(得分:3)
obj[privateProperty] = …;
倾向于让我认为privateProperty
可能是一个像前几年一样的字符串。
嗯,这是我们需要忘记的旧思维。 privateProperty
是 键 ,可以是字符串(属性名称)或符号。同样,我们已经学会区分(整数)索引和“普通”属性。
ES6似乎允许任何“标准”变量名称
就像Ruby一样。区别在于ES6没有为符号引入文字符号(它解析为同一个符号),但只允许使用Symbol
(本地)或Symbol.for
(全局)创建它们。
没有标准约定用于命名包含符号值的变量
当然,如果您倾向于需要此类型注释,则可以始终使用hungarian notation。如果我必须标注一个标准,我建议使用更微妙的前导下划线(var _myPrivate
)。属性名称中的下划线总是暗示一些特殊的东西,然后它对于计算属性键(obj[_myPrivate]
)看起来类似。
是否有在ES6中命名符号的约定?
虽然没有关于命名符号保持变量的约定(但是),当然有一个命名符号本身的约定:
Symbol
的参数给出)。当然,无论如何它们仍然是独一无二的,所以你基本上可以使用你想要的任何名称。@@iterator = Symbol.for("Symbol.iterator");
)。如果符号由模块或库导出,则其描述符应以模块/库名称为前缀(以避免冲突)。对变量使用相同的名称可能是最佳做法(就像本机符号已经做的那样,Symbol.iterator.toString() == "Symbol(Symbol.iterator)"
)。