有人可以解释 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.querySelectordocument.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 中的美元符号吗?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以解释 Javascript 中的“去抖动”功能吗

有人可以解释以下 javascript 代码吗?

有人可以用 javascript 为我解释 =+ 运算符吗? [复制]

有人可以解释这段 JavaScript 代码吗

vue中美元符号在安卓显示异常

$ -----JavaScript 中美元符号 $ 的作用