我经常看到JavaScript中以美元符号开头的变量。什么时候/为什么选择以这种方式为变量加上前缀?

(我不是问你在jQuery和其他中看到的$('p.foo')语法,而是像$name和$order这样的正常变量)


当前回答

在ECMAScript的第1版、第2版和第3版中,规范明确禁止使用$前缀的变量名,除非是在自动生成代码的上下文中:

美元符号($)和下划线(_)允许出现在标识符中的任何位置。美元符号仅用于机械生成的代码。

然而,在下一个版本(当前的第5版)中,这一限制被取消了,上面的段落被替换为

美元符号($)和下划线(_)允许出现在IdentifierName中的任何位置。

因此,$符号现在可以在变量名中自由使用。某些框架和库对符号的含义有自己的约定,在这里的其他回答中说明了这一点。

其他回答

$字符对于JavaScript引擎没有特殊意义。它只是变量名中的另一个有效字符,如a-z, a-z, _, 0-9等…

jQuery中最常见的用法是将存储在变量中的jQuery对象与其他变量区分开来。

例如,我会定义:

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

我发现这在编写jQuery代码时非常有帮助,并且可以很容易地看到具有不同属性集的jQuery对象。

有效的JavaScript标识符必须以字母开头, 下划线(_)或美元符号($); 后续字符也可以 是数字(0-9)。因为JavaScript是区分大小写的, 信 包括字母“A”到“Z”(大写)和 字母a到z(小写)。

细节: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables

在ECMAScript的第1版、第2版和第3版中,规范明确禁止使用$前缀的变量名,除非是在自动生成代码的上下文中:

美元符号($)和下划线(_)允许出现在标识符中的任何位置。美元符号仅用于机械生成的代码。

然而,在下一个版本(当前的第5版)中,这一限制被取消了,上面的段落被替换为

美元符号($)和下划线(_)允许出现在IdentifierName中的任何位置。

因此,$符号现在可以在变量名中自由使用。某些框架和库对符号的含义有自己的约定,在这里的其他回答中说明了这一点。

${varname}只是jQuery开发人员用来区分包含jQuery元素的变量的命名约定。

Plain {varname}用于存储一般内容,如文本和字符串。 ${varname}保存从jQuery返回的元素。

你也可以使用plain {varname}来存储jQuery元素,但正如我在开始时所说的,这将它与普通变量区别开来,使其更容易理解(想象一下将其混淆为普通变量并搜索以了解它所包含的内容)。

例如:

var $blah = $(this).parents('.blahblah');

这里,blah存储返回的jQuery元素。

因此,当其他人在代码中看到$blah时,他们会明白这不仅仅是一个字符串或数字,而是一个jQuery元素。