为什么JavaScriptvariables是以美元符号开始的?

我经常看到带有以美元符号开头的variables的JavaScript。 何时/为什么要select以这种方式为variables添加前缀?

(我不是问你在jQuery和其他人看到的$('p.foo')语法,而是像$name$order这样的普通variables)

jQuery中非常常见的用法是将存储在variables中的jQuery对象与其他variables区分开来。 例如,我会定义

 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对象。

在ECMAScript的第1,第2和第3版中 ,除了自动生成的代码的上下文之外,使用$ -prefixed的variables名称已被该规范显式阻止:

美元符号( $ )和下划线( _ )在标识符的任何地方都是允许的。 美元符号仅用于机械生成的代码。

然而,在下一个版本(现在的第5版 )中,这个限制被放弃了,而上面的这段代替了

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

因此,$符号现在可以在variables名称中自由使用。 某些框架和图书馆在符号的含义上有其自己的约定,在这里的其他答案中提到。

正如其他人所提到的那样,美元符号将被机械生成的代码所使用。 但是,这个惯例已经被一些非常stream行的JavaScript库打破了。 JQuery,Prototype和MS AJAX(AKA Atlas)都在其标识符(或作为整个标识符)中使用此字符。

总之,您可以随时使用$ 。 (翻译不会抱怨。)问题是什么时候你使用它?

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

例如:

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

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

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

Angular Namespaces $$$

为了防止意外的名字与您的代码冲突,Angular将前缀$的公共对象的名称和$与私有对象的名称。 请不要在代码中使用$$$前缀。

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

Stevo是正确的,美元脚本符号(在Javascript和jQuery平台,而不是在PHP中)的含义和用法是完全语义的。 $是可以用作标识符名称的一部分的字符。 另外,美元符号也许不是您在Javascript中可能遇到的最“奇怪”的东西。 以下是有效的标识符名称的一些示例:

 var _ = function() { alert("hello from _"); } var \u0024 = function() { alert("hello from $ defined as u0024"); } var Ø = function() { alert("hello from Ø"); } var $$$$$ = function() { alert("hello from $$$$$"); } 

上面的所有例子都可以使用。

试试看

$字符对JavaScript引擎没有特别的意义。 这只是另一个有效的字符,如az,AZ,_,0-9等variables名称。

由于variables名开头的_常常用来表示一个私有variables(或者至less有一个保持私有variables),所以我发现$方便地在我自己的简短别名之前添加到generics代码库中。

例如,在使用jQuery时,我倾向于使用variables$J (而不是$ ),并在使用php.js时使用$P等。

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

它也不会混淆代码(或需要额外的input),因为每个库调用都重复一个完全指定的名称。

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

但这只是我自己的惯例。

就像我在过去4年中所经历的那样,它将允许某个人轻松地识别指向值/对象的variables还是jQuery包装的DOM元素

 Ex: var name = 'jQuery'; var lib = {name:'jQuery',version:1.6}; var $dataDiv = $('#myDataDiv'); 

虽然您可以简单地使用它来标识您的标识符,但它应该用于生成的代码,例如模板中的replace标记。

${varname}只是jQuery开发人员用来区分持有jQuery元素的variables的命名约定。

Plain {varname}用于存储一般的东西,如文本和string。 ${varname}包含从jQuery返回的元素。

你也可以使用plain {varname}来存储jQuery元素,但是正如我在开始时所说的那样,它将它与普通variables区分开来,并且使它更容易理解(想象一下,将它混淆为一个简单的variables并且search遍历来理解它拥有)。

例如 :

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

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

所以,当别人在代码中看到$blah时,他们会明白这不仅仅是一个string或数字,而是一个jQuery元素。

Angular使用的是由框架生成的属性。 猜猜,他们正在通过ECMA-262 3.0提供的(现在已经不存在的)暗示。

如果您看到美元符号($)或者双美元符号($),并且对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

$用于在普通variables和jqueryvariables之间进行DISTINGUISH。 让你在FLIPKART下订单,然后如果订单是一个variables显示你的string输出,那么它被命名为简单的“订单”,但如果我们点击地方订单然后返回一个对象,该对象将由$表示为$顺序“,这样程序员就可以在整个代码中findjavascriptvariables和jqueryvariables。

我有时候会用javascriptvariables来使用php名称约定的原因:在进行inputvalidation时,我想运行客户端和服务器端的完全相同的algorithm。 我真的希望代码的两面尽可能相似,以简化维护。 在variables名称中使用美元符号使得这更容易。

(另外,一些明智的帮助函数有助于使代码看起来相似,例如包装input值查找,strlen,substr等的非OO版本。尽pipe如此,仍需要一些手动调整。

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

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