有人可以在Javascript中解释美元符号吗?


378

有问题的代码在这里:

var $item = $(this).parent().parent().find('input');

变量名称中美元符号的用途是什么,为什么不仅仅排除它呢?



[ttony21的答案] [1]指出Javascript中没有类型,这是错误的。[官方文档] [2] [1]:stackoverflow.com/questions/846585/… [2]:ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam 2011年

这个线程已经很老了,但是主流浏览器似乎已经标准化了$,$$全球变量。$ vs $$应该做什么?
尼克·索蒂罗斯

没什么,除非您在所说的浏览器控制台中。铬例如定义$ $$和作为快捷方式document.querySelectordocument.querySelectorAll
凯文乙

Answers:


381

变量中的“ $”对解释器而言没有什么特别的含义,就像下划线一样。

据我所见,许多使用jQuery的人(这就是您的示例代码对我而言的样子)倾向于给包含jQuery对象的变量加上$前缀,以使它们易于识别并且不会与整数混淆。 。

$()jQuery中的美元符号函数是一个经常使用的库函数,因此最好使用短名称。


86
注意:默认情况下,jQuery使用“ $”作为“ jQuery”的快捷方式。这对使用其他Javascript库有一些影响。请参阅docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya,2009年

17
换句话说,$可以与变量/函数名称中的任何可接受的符号相提并论。做var $=function(){}和做一样var a=function(){}
F-3000

24
Thimmayya您的评论“默认情况下,jQuery使用“ $”作为“ jQuery”的快捷方式”,应在Jquery网站的每个页面顶部以粗体显示,这些示例都经过严格记录。
RustyH 2014年

将$指定为函数参数该怎么办?我正在看一些类似的代码jQuery(document).ready(function($){...然后$在函数实现中使用。
still_dreaming_1 2016年

4
@ ThrowawayAccount3Million这只是名称的一部分。如果是$scope$,则是该名称中的字符之一。就像您e在的末尾起飞一样$scope,它将无法工作,因此,$也将无法使用。在您看到类似的情况下,$( "a" ).addClass( "test" )美元符号就是它的全名。
still_dreaming_1

49

在您的示例中,$除了是名称字符之外,没有其他特殊含义。

但是,在ECMAScript 6(ES6)中,$可能代表模板文字

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.

37

$符号是变量和函数的标识符。

https://web.archive.org/web/20160529121559/http://www.authenticsociety.com/blog/javascript_dollarsign

这清楚地说明了美元符号的作用。

这是另一种解释:http : //www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
JavaScript确实有类型;在任何情况下,美元符号甚至与此相关?它只是一个字符,恰好是Javascript中的合法标识符。
Erik Kaplun

10
我不确定我会称该链接为“清晰”的解释。在定义函数和变量名称时,是否真的需要6个以上的段落来说明$只是一个有效字符?
2015年

1
看起来第一个链接再次正常工作。我必须同意@Slight的说法,即其他解释很糟糕。
桑德·加勒森

链接中的示例代码非常容易理解。太棒了!
蔡宗容

32

美元符号的处理方式与普通字母或下划线(_)相同。这对口译员没有特殊意义。

与许多类似的语言不同,Javascript中的标识符(例如函数名和变量名)不仅可以包含字母,数字和下划线,还可以包含美元符号。甚至允许它们以美元符号开头,或者包含美元符号,不能包含其他任何符号。

因此,$是Javascript中的有效函数或变量名。

为什么要在标识符中使用美元符号?

语法实际上并没有强制标识符中使用美元符号,因此您要如何使用它取决于您。过去,通常建议仅在生成的代码中以美元符号开头标识符,也就是说,不是手动创建的代码,而是由代码生成器创建的代码。

但是,在您的示例中,情况似乎并非如此。似乎有人刚开始就以美元符号表示乐趣-也许他们是出于习惯而这样做的PHP程序员。在PHP中,所有变量名都必须在其前面带有美元符号。

如今,解释器中的美元符号还有另一个常见含义:jQuery对象,其名称包含一个美元符号($)。这是从较早的Javascript框架(例如Prototype)借用的约定,如果jQuery与其他此类框架一起使用,则会发生名称冲突,因为它们都将使用该名称$(可将jQuery配置为对其全局对象使用不同的名称) 。Javascript中没有什么特别的允许jQuery使用单个美元符号作为其对象名称的方法。如上所述,它只是另一个有效的标识符名称。


现在,您可以将jQuery对象与var $j = jQuery.noConflict();$ j 冲突了。
贾斯汀·刘

6

美元符号在ecmascript 2015-2016中用作“模板文字”。例:

var a = 5;
var b = 10;
console.log(`Sum is equal: ${a + b}`); // 'Sum is equlat: 15'

这里的工作示例:https : //es6console.com/j3lg8xeo/ 注意此符号“ ` ”,它不是普通引号。

您还可以在使用库jQuery时遇到$ 。

正则表达式中的 $符号表示行尾。


4

没有理由。也许编写它的人来自PHP。它具有与您将其命名为“ _item”或“ item”或“ item $$”相同的效果。

作为后缀(例如“ item $”,发音为“ items”),它可以表示诸如DOM元素之类的可观察到的东西,类似于匈牙利符号,称为“芬兰符号”


1

这是一个很好的简短视频说明:https : //www.youtube.com/watch?v=Acm-MD_6934

根据Ecma,国际标识符名称是根据Unicode标准第5章 “标识符”部分中给出的语法进行解释的标记,并进行了一些小的修改。标识符是一个IdentifierName,它不是ReservedWord(请参见7.6.1)。Unicode标识符语法基于Unicode标准指定的规范性和信息性字符类别。所有符合标准的ECMAScript实现都必须将Unicode标准3.0版中指定类别中的字符视为这些类别中的字符。此标准指定了特定的字符添加项:

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

进一步的阅读可以在以下网站找到:http : //www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International是一个成立于1961年的行业协会,致力于信息和通信技术(ICT)和消费电子(CE)的标准化。


虽然此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。
TartanLlama 2015年

... @TartanLlama如果您将我的答案降级,请阅读我最新的答案。谢谢。
Nomis

不是我!我只是标记了它。
TartanLlama 2015年

…赞成的人,请解释原因,并阅读我编辑过的答案。谢谢。
Nomis

5
... @ TartanLlama这再次证明了Stackoverflows匿名降级功能已被破坏。用可接受的答案回答旧问题对我来说是可以的,因为我自己发现浏览其他答案时查看其他答案很有用。
Nomis 2015年

1

当使用jQuery时,$仅在约定中使用符号作为变量名的前缀。如上例所示,它是完全可选的,仅用于指示变量包含jQuery对象。

这意味着当需要在对象上调用另一个jQuery函数时,您无需$()再次包装它。例如,比较以下内容:

// the usual way
var item = $(this).parent().parent().find('input');
$(item).hide(); // this is a double wrap, but required for code readability
item.hide(); // this works but is very unclear how a jQuery function is getting called on this 

// with $ prefix
var $item = $(this).parent().parent().find('input');
$item.hide(); // direct call is clear
$($item).hide(); // this works too, but isn't necessary

使用$前缀,可以立即识别已经包含jQuery对象的变量,并使代码更具可读性,并使用消除了两次/多次包装$()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.