我经常看到JavaScript中以美元符号开头的变量。什么时候/为什么选择以这种方式为变量加上前缀?
(我不是问你在jQuery和其他中看到的$('p.foo')语法,而是像$name和$order这样的正常变量)
我经常看到JavaScript中以美元符号开头的变量。什么时候/为什么选择以这种方式为变量加上前缀?
(我不是问你在jQuery和其他中看到的$('p.foo')语法,而是像$name和$order这样的正常变量)
当前回答
在ECMAScript的第1版、第2版和第3版中,规范明确禁止使用$前缀的变量名,除非是在自动生成代码的上下文中:
美元符号($)和下划线(_)允许出现在标识符中的任何位置。美元符号仅用于机械生成的代码。
然而,在下一个版本(当前的第5版)中,这一限制被取消了,上面的段落被替换为
美元符号($)和下划线(_)允许出现在IdentifierName中的任何位置。
因此,$符号现在可以在变量名中自由使用。某些框架和库对符号的含义有自己的约定,在这里的其他回答中说明了这一点。
其他回答
我有时在javascript变量中使用php名称约定的原因: 当进行输入验证时,我想在客户端运行完全相同的算法, 和服务器端。我真的希望两边的代码看起来尽可能相似,以简化维护。在变量名中使用美元符号会更容易。
(此外,一些明智的帮助函数有助于使代码看起来相似,例如包装输入值查找,strlen的非oo版本,substr等。不过,它仍然需要一些手动调整。)
虽然您可以简单地使用它作为标识符的前缀,但它应该用于生成的代码,例如模板中的替换令牌。
在ECMAScript的第1版、第2版和第3版中,规范明确禁止使用$前缀的变量名,除非是在自动生成代码的上下文中:
美元符号($)和下划线(_)允许出现在标识符中的任何位置。美元符号仅用于机械生成的代码。
然而,在下一个版本(当前的第5版)中,这一限制被取消了,上面的段落被替换为
美元符号($)和下划线(_)允许出现在IdentifierName中的任何位置。
因此,$符号现在可以在变量名中自由使用。某些框架和库对符号的含义有自己的约定,在这里的其他回答中说明了这一点。
由于变量名开头的_通常用于表示一个私有变量(或至少是一个私有变量),我发现$方便在我自己的简短别名前面添加到泛型代码库。
例如,在使用jQuery时,我更喜欢使用变量$J(而不是仅仅$),在使用php.js时使用$P,等等。
前缀使它在视觉上与其他变量(如我自己的静态变量)不同,提示我代码是某个库或其他库的一部分,一旦他们知道了约定,就不太可能与他人冲突或混淆。
它也不会像对每个库调用重复完全指定的名称那样使代码变得混乱(或需要额外的输入)。
我喜欢把它看作是类似于修饰键扩展单键可能性的作用。
但这只是我自己的习惯。
${varname}只是jQuery开发人员用来区分包含jQuery元素的变量的命名约定。
Plain {varname}用于存储一般内容,如文本和字符串。 ${varname}保存从jQuery返回的元素。
你也可以使用plain {varname}来存储jQuery元素,但正如我在开始时所说的,这将它与普通变量区别开来,使其更容易理解(想象一下将其混淆为普通变量并搜索以了解它所包含的内容)。
例如:
var $blah = $(this).parents('.blahblah');
这里,blah存储返回的jQuery元素。
因此,当其他人在代码中看到$blah时,他们会明白这不仅仅是一个字符串或数字,而是一个jQuery元素。