有人可以解释 Javascript 中的美元符号吗?
Posted
技术标签:
【中文标题】有人可以解释 Javascript 中的美元符号吗?【英文标题】:What is the purpose of the dollar sign in JavaScript? 【发布时间】:2010-10-25 04:46:31 【问题描述】:有问题的代码在这里:
var $item = $(this).parent().parent().find('input');
变量名中美元符号的作用是什么,为什么不直接排除呢?
【问题讨论】:
***.com/questions/205853/… 的可能重复项 [ttony21's answer][1] 错误地指出 javascript 中没有类型,参见。 [官方文档][2][1]:***.com/questions/846585/…[2]:ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf 这个帖子很老了,但似乎主流浏览器已经标准化了 $, $$ 全局变量。 $ vs $$ 应该做什么? 没什么,除非你在上述浏览器的控制台中。例如,Chrome 将 $ 和 $$ 定义为document.querySelector
和 document.querySelectorAll
的快捷方式
Why would a JavaScript variable start with a dollar sign?的可能重复
【参考方案1】:
没有理由。也许编写它的人来自 php。它与您将其命名为“_item”或“item”或“item$$”具有相同的效果。
作为后缀(如“item$”,发音为“items”),它可以表示诸如 DOM 元素之类的可观察对象,称为 "Finnish Notation",类似于匈牙利表示法。
【讨论】:
【参考方案2】:$ 符号是变量和函数的标识符。
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
【讨论】:
Javascript 确实有类型;无论如何,美元符号与此有什么关系?它只是一个恰好是 Javascript 中的合法标识符的字符。 我不确定我是否会将该链接称为“清晰”的解释。在定义函数和变量名时,真的需要 6+ 段来解释 $ 只是一个有效字符吗? 看起来第一个链接又可以工作了。我必须同意@Slight 的说法,即替代解释很糟糕。 链接中的示例代码很容易理解。太棒了!【参考方案3】:变量中的“$”对解释器来说没有什么特别的意义,就像下划线一样。
据我所见,许多使用jQuery(在我看来就是您的示例代码)的人倾向于在包含 jQuery 对象的变量前加上 $,这样它们就很容易被识别并且不会混淆比如整数。
jQuery中的美元符号函数$()
是一个经常使用的库函数,所以最好取一个短的名字。
【讨论】:
注意:默认情况下,jQuery 使用“$”作为“jQuery”的快捷方式。这对使用其他 Javascript 库有一些影响。见docs.jquery.com/Using_jQuery_with_Other_Libraries 换句话说,$ 与变量/函数名称中任何可接受的符号相当。执行var $=function()
与执行var a=function()
非常相似。
Thimmayya 您的评论“默认情况下,jQuery 使用“$”作为“jQuery”的快捷方式”应该在 Jquery 网站上每个页面的顶部以粗体字母显示,他们的示例被可怕地记录在案。
如果将$指定为函数参数呢?我在看一些像jQuery(document).ready(function($)
这样的代码...然后在函数实现中使用$。
@ThrowawayAccount3Million 这只是名称的一部分。对于$scope
,$ 是该名称中的字符之一。就像你把$scope
结尾的e
去掉一样,是不行的,所以去掉$
也是不行的。如果您看到类似 $( "a" ).addClass( "test" )
的内容,美元符号就是它的全名。【参考方案4】:
美元符号被视为普通字母或下划线 (_
)。它对解释器没有特殊意义。
与许多类似语言不同,Javascript 中的标识符(如函数名和变量名)不仅可以包含字母、数字和下划线,还可以包含美元符号。它们甚至可以以美元符号开头,或者仅由一个美元符号组成,不包含其他任何内容。
因此,$
是 Javascript 中的有效函数或变量名。
为什么要在标识符中使用美元符号?
语法并没有真正强制标识符中美元符号的任何特定用法,因此取决于您希望如何使用它。过去,通常建议仅在生成的代码中使用美元符号开头的标识符 - 也就是说,不是手动创建的代码,而是由代码生成器创建的。
但是,在您的示例中,情况似乎并非如此。看起来有人只是为了好玩而在开头放了一个美元符号——也许他们是一个 PHP 程序员,出于习惯,或者其他什么。在 PHP 中,所有变量名前都必须有一个美元符号。
现在解释器中的美元符号还有另一个常见含义:jQuery 对象,其名称仅 由单个美元符号 ($
) 组成。这是从早期的 Javascript 框架(如 Prototype)借用的约定,如果 jQuery 与其他此类框架一起使用,则会出现名称冲突,因为它们都将使用名称 $
(可以将 jQuery 配置为使用不同的名称作为它的名称)全局对象)。 Javascript 中没有什么特别的地方可以让 jQuery 使用单个美元符号作为其对象名。如上所述,它只是另一个有效的标识符名称。
【讨论】:
你不能与这个var $j = jQuery.noConflict();
冲突jQuery 对象现在$j 是jQuery 对象。【参考方案5】:
这里有一个很好的短视频解释:https://www.youtube.com/watch?v=Acm-MD_6934
根据 Ecma 国际标识符名称是根据 Unicode 标准 chapter 5 的“标识符”部分中给出的语法解释的标记,并进行了一些小的修改。 Identifier 是不是 ReservedWord (see 7.6.1) 的 IdentifierName。 Unicode 标识符语法基于 Unicode 标准指定的规范性和信息性字符类别。所有符合 ECMAScript 实现的 Unicode 标准 3.0 版中的指定类别中的字符必须被视为这些类别中的字符。此标准指定了特定的字符添加:
标识符名称中的任何位置都允许使用美元符号 ($) 和下划线 (_)。
可以在以下位置找到更多阅读:http://www.ecma-international.org/ecma-262/5.1/#sec-7.6
Ecma International 是一个行业协会,成立于 1961 年,致力于信息和通信技术 (ICT) 和消费电子 (CE) 的标准化。
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。 ... @TartanLlama 如果您将我的答案降级,请阅读我更新后的答案。谢谢。 不是我!我只是标记了它。 ... 好的,拒绝投票的人,请解释原因并阅读我编辑的答案。谢谢。 ...@TartanLlama 这只是(再次)证明 ***s 匿名降级功能已被破坏。用公认的答案回答老问题对我来说是可以的,因为我自己发现在浏览答案时查看其他答案很有用。【参考方案6】:在您的示例中, $ 除了作为名称的字符之外没有特殊意义。
然而,在 ECMAScript 6 (ES6) 中,$ 可能代表 Template Literal
var user = 'Bob'
console.log(`We love $user.`); //Note backticks
// We love Bob.
【讨论】:
"$ 除了作为名称的一个字符之外没有特殊意义。"它确实具有特殊意义。它表明该变量的值是一个 jQuery 包装的对象。这是Hungarian notation 的一种类型。因此,您知道如何完全通过命名约定来操作值。【参考方案7】:美元符号在 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时遇到$。
正则表达式中的$符号表示行尾。
【讨论】:
问题中没有出现这种美元符号的使用。这是这个答案从其他地方移到这里的结果吗?【参考方案8】:在使用 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 对象的变量可以立即识别,代码更具可读性,并消除了 $()
的双重/多重包装。
【讨论】:
【参考方案9】:"在 JavaScript 中使用美元符号不是很常见,但是 专业程序员经常用它作为 main 的别名 JavaScript 库中的函数。
例如,在 JavaScript 库 jQuery 中,主函数
$
用于选择 HTML 元素。在 jQuery 中$("p");
表示“全选 p 个元素"。"
通过https://www.w3schools.com/js/js_variables.asp
【讨论】:
【参考方案10】:我的回答是这里缺乏技术上的复杂性,甚至使用了像“技术上的”这样的词,这些词实际上不在字典中但很少使用,例如“易受骗”这个词也不能在字典里也能找到。
除此之外:这是我对一个简单问题的简单回答,以一种简单的方式来回答这样一个非常复杂的问题,而对像这样的空想问题的简单空想回答如下:
$('#ident') 的意思是“document.getElementById('ident')。
$('.classname') 的意思是“document.getElementByClass('classname')。
是的,我知道没有 getElementByClass,但这就是人们在使用 $ 符号时所说的,就像 jQuery 语法一样。现在你知道答案了,我敢打赌你仍然不知道如何问这个问题。那么现在你不必为了理解 jQuery babel 而学习 jQuery 对吗?请给我+10!
【讨论】:
以上是关于有人可以解释 Javascript 中的美元符号吗?的主要内容,如果未能解决你的问题,请参考以下文章