Ken*_*Ken 1010 javascript naming-conventions
我经常看到带有以美元符号开头的变量的JavaScript.何时/为什么你会选择以这种方式为变量添加前缀?
(我不是问$('p.foo')你在jQuery和其他人看到的语法,而是像$name和的常见变量$order)
jon*_*ohn 1377
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
Run Code Online (Sandbox Code Playgroud)
我发现这对编写jQuery代码非常有帮助,并且可以很容易地看到具有不同属性集的jQuery对象.
cic*_*cic 244
在ECMAScript的第1版,第2 版和第3版中,除了在自动生成的代码的上下文中之外,规范明确禁止使用$ -prefixed变量名:
标识符中的任何位置都允许使用美元符号(
$)和下划线(_).美元符号仅用于机械生成的代码.
但是,在下一个版本(第5版,当前版本)中,此限制被删除,并且上面的段落被替换为
在IdentifierName中的任何位置都允许使用美元符号(
$)和下划线(_).
因此,$ sign现在可以在变量名中自由使用.某些框架和库对符号的含义有自己的约定,这里有其他答案.
Ben*_*nry 60
正如其他人所提到的,美元符号旨在由机械生成的代码使用.但是,一些非常流行的JavaScript库打破了这种惯例.JQuery,Prototype和MS AJAX(AKA Atlas)都在其标识符中使用此字符(或作为整个标识符).
简而言之,您可以随时使用$.(翻译不会抱怨.)问题是你想什么时候使用它?
我个人不使用它,但我认为它的使用是有效的.我认为MS AJAX使用它来表示函数是一个更冗长的调用的别名.
例如:
var $get = function(id) { return document.getElementById(id); }
Run Code Online (Sandbox Code Playgroud)
这似乎是一个合理的惯例.
Tra*_*vis 54
在AngularJS的上下文中,$前缀仅用于框架代码中的标识符.指示框架的用户不要在他们自己的标识符中使用它:
角度命名空间
$和$$为了防止与代码发生意外名称冲突,Angular将公共对象的
$名称和私有对象的名称作为前缀$$.请不要在代码中使用$或$$前缀.
资料来源:https://docs.angularjs.org/api
Mic*_*ary 27
我是2006年创立这个大会的人,并在早期的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
Run Code Online (Sandbox Code Playgroud)
但这并没有真正说明这一点.即使没有$,我们仍然有两个不同的变量名在这里,email和email_field.那里的那个很好.$当我们已经有两个不同的名字时,为什么我们需要在其中一个名字中加入?
实际上,我不会在email_field这里使用有两个原因:names_with_underscores不是惯用的JavaScript,field对DOM元素没有意义.但我确实遵循了同样的想法.
我尝试了一些不同的东西,其中有一些非常类似的例子:
var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it
Run Code Online (Sandbox Code Playgroud)
(当然jQuery对象可以有多个DOM元素,但我正在处理的代码有很多id选择器,因此在这些情况下有1:1的对应关系.)
我有另一种情况,一个函数接收一个DOM元素作为参数,还需要一个jQuery对象:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var emailJQ = $(email);
// Now email is the DOM element and emailJQ is a jQuery object for it
}
Run Code Online (Sandbox Code Playgroud)
那有点令人困惑!在我的一些代码中,email是jQuery对象并且emailElement是DOM元素,但在另一个中,email是DOM元素并且emailJQ是jQuery对象.
没有一致性,我一直把它们混合起来.另外,为了同一件事情而不得不为两个不同的名称组成一个小麻烦:一个用于jQuery对象,另一个用于匹配的DOM元素.此外email,emailElement和emailJQ,我一直在尝试其他变化.
然后我注意到一个常见的模式:
var email = $("#email");
var emailJQ = $(email);
Run Code Online (Sandbox Code Playgroud)
由于JavaScript $只是另一个名字的字母,因为我总是从一个$(whatever)调用中得到一个jQuery对象,所以这个模式终于明白了.我可以接听$(...)电话并删除一些字符,它会得到一个非常好的名字:
$("#email")$(email)
Strikeout并不完美,但你可能会有这样的想法:删除一些字符后,这两行最终看起来像:
$email
Run Code Online (Sandbox Code Playgroud)
就在那时我意识到我不需要像emailElement或那样组成一个会议emailJQ.已经有一个很好的会议盯着我:从$(whatever)电话中取出一些角色然后变成了$whatever.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object
Run Code Online (Sandbox Code Playgroud)
和:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var $email = $(email);
// $email is the jQuery object and email is the DOM object
// Same names as in the code above. Yay!
}
Run Code Online (Sandbox Code Playgroud)
所以我不必一直编造两个不同的名字,但可以使用带有或不带$前缀的相同名称.而$前缀是我处理的是一个jQuery对象一个很好的提醒:
$('#email').click( ... );
Run Code Online (Sandbox Code Playgroud)
要么:
var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );
Run Code Online (Sandbox Code Playgroud)
小智 21
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 $$$$$"); }
Run Code Online (Sandbox Code Playgroud)
上面的所有例子都可行.
试试吧.
小智 7
$ character对JavaScript引擎没有特殊意义.它只是变量名中的另一个有效字符,如az,AZ,_,0-9等......