我正在摆弄 ES6,查看符号。与 Ruby 不同,例如你会写:symbol
,ES6符号似乎允许任何“标准”变量名。说实话,我觉得这很令人困惑:
var privateProperty = Symbol();
var obj = {};
obj[privateProperty] = 'some value goes here';
因为它往往让我认为privateProperty
可能是像几年前一样的普通字符串。使用:privateProperty
无效。
所以就像使用$bar
对于 jQuery 对象或bar$
对于 RxJS/Bacon 流,我想知道 ES6 中是否已经有命名符号的既定约定?
obj[privateProperty] = …;
往往让我认为privateProperty
可能是像几年前一样的普通字符串。
嗯,这是我们需要忘记的旧观念。privateProperty
is a key,它可以是一个字符串(属性name) 或符号。同样,我们已经学会了区分(整数)indices来自“正常”属性。
ES6 似乎允许任何“标准”变量名
就像鲁比一样。不同之处在于 ES6 没有引入符号的字面表示法(它们解析为相同的东西),而是允许仅通过使用来创建它们Symbol
(本地)或Symbol.for
(全球)。
有没有标准约定用于命名保存符号值的变量。
当然,您可以随时使用匈牙利记数法 https://en.wikipedia.org/wiki/Hungarian_notation如果您倾向于需要此类类型注释。如果我必须创造一个标准,我建议使用更微妙的前导下划线(var _myPrivate
)。属性名称中的下划线总是暗示着一些特殊的东西,并且对于计算属性键来说它看起来很相似(obj[_myPrivate]
) then.
ES6 中符号命名有约定吗?
虽然还没有命名符号保存变量的约定,但肯定有命名符号本身的约定:
- 局部符号应该有一个非常具有描述性的描述符字符串(作为参数给出
Symbol
)。当然,无论如何它们仍然是独一无二的,所以你基本上可以使用任何你想要的名称。
- 全局符号需要避免冲突。约定是适当地命名它们,并用点连接这些命名空间名称 - 就像 Java 包名称一样。如果符号可用作全局变量,则其描述符应具有相同的名称(类似于内置的本机符号,类似于
@@iterator = Symbol.for("Symbol.iterator");
)。如果符号由模块或库导出,则其描述符应以模块/库名称作为前缀(以避免冲突)。
最好的做法是对变量使用相同的名称(就像本机符号已经做的那样,Symbol.iterator.toString() == "Symbol(Symbol.iterator)"
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)