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

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


当前回答

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

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

其他回答

由于变量名开头的_通常用于表示一个私有变量(或至少是一个私有变量),我发现$方便在我自己的简短别名前面添加到泛型代码库。

例如,在使用jQuery时,我更喜欢使用变量$J(而不是仅仅$),在使用php.js时使用$P,等等。

前缀使它在视觉上与其他变量(如我自己的静态变量)不同,提示我代码是某个库或其他库的一部分,一旦他们知道了约定,就不太可能与他人冲突或混淆。

它也不会像对每个库调用重复完全指定的名称那样使代码变得混乱(或需要额外的输入)。

我喜欢把它看作是类似于修饰键扩展单键可能性的作用。

但这只是我自己的习惯。

如果你看到美元符号($)或双美元符号($$),并想知道这在Prototype框架中意味着什么,下面是你的答案:

$$('div');
// -> all DIVs in the document.  Same as document.getElementsByTagName('div')!

$$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).

$$('li.faux');
// -> all LI elements with class 'faux'

来源: http://www.prototypejs.org/api/utility/dollar-dollar

正如其他人所提到的,美元符号是用于机械生成的代码。然而,这种惯例已经被一些非常流行的JavaScript库打破了。JQuery, Prototype和MS AJAX(又名Atlas)都在它们的标识符中使用这个字符(或作为一个完整的标识符)。

简而言之,你可以随时使用美元。(翻译不会抱怨。)问题是你想什么时候使用它?

我个人不使用它,但我认为它的使用是有效的。我认为MS AJAX使用它来表示函数是一些更详细调用的别名。

例如:

var $get = function(id) { return document.getElementById(id); }

这似乎是一个合理的惯例。

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

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

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

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

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

在AngularJS的上下文中,$前缀只用于框架代码中的标识符。框架的用户被告知不要在自己的标识符中使用它:

Angular命名空间$和$$ 为了防止与你的代码发生意外的名称冲突,Angular会在公共对象的名称前加上$,在私有对象的名称前加上$$。请不要在代码中使用$或$$前缀。

来源:https://docs.angularjs.org/api