ES6 中是否有命名符号的约定?
Is there a convention for naming symbols in ES6?
我正在研究 ES6,查看符号。不像 ruby 例如你写 :symbol
,ES6 符号似乎允许任何 "standard" 变量名。老实说,我觉得这很混乱:
var privateProperty = Symbol();
var obj = {};
obj[privateProperty] = 'some value goes here';
因为它让我觉得 privateProperty
可能是像几年前一样的普通字符串。使用 :privateProperty
无效。
所以就像对 jQuery 对象使用 $bar
或对 RxJS/Bacon 流使用 bar$
一样,我想知道是否已经存在命名符号的约定在 ES6 中?
obj[privateProperty] = …;
tends to make me think that privateProperty
is probably a plain string like the years before.
嗯,这是我们需要忘记的旧思想。 privateProperty
是一个 key,它可以是字符串 (属性 name) 或符号。同样,我们已经学会了区分(整数)indices 和 "normal" properties.
ES6 seems to allow any "standard" variable name
就像 Ruby 一样。不同之处在于 ES6 没有为符号引入文字符号(解析为同一事物),但只允许使用 Symbol
(本地)或 Symbol.for
(全局)创建它们。
对于保存符号值的变量的命名,没有标准约定。
当然,如果您想要这样的类型注释,您总是可以使用 hungarian notation。如果我必须创造一个标准,我会建议使用更微妙的前导下划线 (var _myPrivate
)。 属性 名称中的下划线总是暗示一些特殊的东西,并且它看起来类似于计算的 属性 键(obj[_myPrivate]
)然后。
Is there a convention for naming symbols in ES6?
虽然(还)没有命名符号持有变量的约定,但肯定有命名符号本身的约定:
- 局部符号应该有一个非常具有描述性的描述符字符串(作为
Symbol
的参数给出)。当然,无论如何,它们仍然是独一无二的,所以你基本上可以使用任何你想要的名字。
- 全局符号需要避免冲突。约定是适当地为它们命名空间,并用点连接这些命名空间名称 - 就像 Java 包名称。如果该符号可用作全局变量,则其描述符应具有相同的名称(类似于内置的本机符号,如
@@iterator = Symbol.for("Symbol.iterator");
)。如果符号由模块或库导出,其描述符应以 module/library 名称作为前缀(以避免冲突)。
最好为变量使用相同的名称(就像本机符号已经做的那样,Symbol.iterator.toString() == "Symbol(Symbol.iterator)"
)。
我正在研究 ES6,查看符号。不像 ruby 例如你写 :symbol
,ES6 符号似乎允许任何 "standard" 变量名。老实说,我觉得这很混乱:
var privateProperty = Symbol();
var obj = {};
obj[privateProperty] = 'some value goes here';
因为它让我觉得 privateProperty
可能是像几年前一样的普通字符串。使用 :privateProperty
无效。
所以就像对 jQuery 对象使用 $bar
或对 RxJS/Bacon 流使用 bar$
一样,我想知道是否已经存在命名符号的约定在 ES6 中?
obj[privateProperty] = …;
tends to make me think thatprivateProperty
is probably a plain string like the years before.
嗯,这是我们需要忘记的旧思想。 privateProperty
是一个 key,它可以是字符串 (属性 name) 或符号。同样,我们已经学会了区分(整数)indices 和 "normal" properties.
ES6 seems to allow any "standard" variable name
就像 Ruby 一样。不同之处在于 ES6 没有为符号引入文字符号(解析为同一事物),但只允许使用 Symbol
(本地)或 Symbol.for
(全局)创建它们。
对于保存符号值的变量的命名,没有标准约定。
当然,如果您想要这样的类型注释,您总是可以使用 hungarian notation。如果我必须创造一个标准,我会建议使用更微妙的前导下划线 (var _myPrivate
)。 属性 名称中的下划线总是暗示一些特殊的东西,并且它看起来类似于计算的 属性 键(obj[_myPrivate]
)然后。
Is there a convention for naming symbols in ES6?
虽然(还)没有命名符号持有变量的约定,但肯定有命名符号本身的约定:
- 局部符号应该有一个非常具有描述性的描述符字符串(作为
Symbol
的参数给出)。当然,无论如何,它们仍然是独一无二的,所以你基本上可以使用任何你想要的名字。 - 全局符号需要避免冲突。约定是适当地为它们命名空间,并用点连接这些命名空间名称 - 就像 Java 包名称。如果该符号可用作全局变量,则其描述符应具有相同的名称(类似于内置的本机符号,如
@@iterator = Symbol.for("Symbol.iterator");
)。如果符号由模块或库导出,其描述符应以 module/library 名称作为前缀(以避免冲突)。
最好为变量使用相同的名称(就像本机符号已经做的那样,Symbol.iterator.toString() == "Symbol(Symbol.iterator)"
)。