繁体   English   中英

是否有在ES6中命名符号的约定?

[英]Is there a convention for naming symbols in ES6?

我正在玩ES6,看着符号。 不像ruby,例如你写的:symbol ,ES6符号似乎允许任何“标准”变量名。 说实话,我觉得这很混乱:

var privateProperty = Symbol();
var obj = {};
obj[privateProperty] = 'some value goes here';

因为它往往让我觉得privateProperty可能是像前几年一样的简单字符串。 使用:privateProperty无效。

就像使用$bar作为jQuery对象或使用$bar bar$作为RxJS / Bacon流一样,我想知道是否已经建立了ES6中命名符号的约定?

obj[privateProperty] = …; 倾向于让我认为privateProperty可能是像前几年一样的简单字符串。

嗯,这是我们需要忘记的旧思维。 privateProperty是一个 ,可以是字符串(属性名称 )或符号。 同样,我们已经学会将(整数) 索引与“正常”属性区分开来。

ES6似乎允许任何“标准”变量名称

就像Ruby一样。 不同之处在于ES6没有为符号引入文字符号(它解析为同一个符号),但只允许使用Symbol (本地)或Symbol.for (全局)创建它们。

命名包含符号值的变量没有标准约定
当然,如果您倾向于使用此类型注释,则可以始终使用匈牙利表示法 如果我必须var _myPrivate一个标准,我建议使用更微妙的前导下划线( var _myPrivate )。 属性名称中的下划线总是暗示一些特殊的东西,然后它对于计算属性键( obj[_myPrivate] )看起来类似。

是否有在ES6中命名符号的约定?

虽然没有关于命名符号保持变量的约定(但是),当然有一个命名符号本身的约定:

  • 本地符号应该具有非常具描述性的描述符字符串(作为Symbol的参数给出)。 当然,无论如何它们仍然是独一无二的,所以你基本上可以使用你想要的任何名称。
  • 全局符号需要避免冲突。 惯例是适当地命名它们,并将这些命名空间名称与点连接 - 就像Java包名称一样。 如果符号可用作全局变量,则其描述符应具有相同的名称(类似于内置的本机符号,类似于@@iterator = Symbol.for("Symbol.iterator"); )。 如果符号由模块或库导出,则其描述符应以模块/库名称为前缀(以避免冲突)。

对变量使用相同的名称可能是最佳实践(如本机符号已经做过, Symbol.iterator.toString() == "Symbol(Symbol.iterator)" )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM