【问题标题】:What is the purpose of the dollar sign in JavaScript?JavaScript 中美元符号的用途是什么?
【发布时间】:2022-04-11 15:14:01
【问题描述】:

有问题的代码在这里:

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

变量名中美元符号的作用是什么,为什么不直接排除呢?

标签: javascript naming-conventions


【解决方案1】:

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

据我所见,许多使用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" ) 的内容,美元符号就是它的全名。
【解决方案2】:

在您的示例中, $ 除了作为名称的字符之外没有特殊意义。

然而, 在 ECMAScript 6 (ES6) 中 $ 可能代表Template Literal

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

【讨论】:

  • "$ 除了作为名称的一个字符之外没有特殊意义。“ 它具有特殊意义。它表明该变量的值是一个 jQuery 包装的对象。这是Hungarian notation 的一种类型。因此,您知道如何纯粹通过命名约定来操作该值。
  • @VLAZ 不要将语言语法与库约定混淆。这个问题和这个答案都没有提到 jQuery,而只有 JavaScript - 在 JavaScript 中,$ 符号除了 ES6 中的模板文字之外没有任何特殊含义。
  • @安德烈亚斯费斯特“这个问题和这个答案都没有提到 jQuery" 这个问题最肯定地显示了使用 jQuery 代码。它可能不会提到它但是用法与jQuery的使用方式一致.问题不需要如果这就是它实际显示的内容,请提及 jQuery。 OP是关于它,因为他们不知道.
【解决方案3】:

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

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 的说法,即替代解释很糟糕。
  • 链接中的示例代码很容易理解。惊人的!
【解决方案4】:

美元符号被视为普通字母或下划线 (_)。它对解释器没有特殊意义。

与许多类似的语言不同,身份标识Javascript 中(如函数名和变量名)不仅可以包含字母、数字和下划线,还可以包含也可以包含美元符号.他们甚至被允许以美元符号开头,或者由只要美元符号,仅此而已。

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

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

该语法并没有真正强制标识符中美元符号的任何特定用法,因此取决于您希望如何使用它。过去,通常建议仅以美元符号开头的标识符生成的代码- 也就是说,代码不是手动创建的,而是由代码生成器创建的。

但是,在您的示例中,情况似乎并非如此。看起来有人只是为了好玩而在开头放了一个美元符号——也许他们是一个 PHP 程序员,出于习惯,或者其他什么。在 PHP 中,所有变量名前面都必须有一个美元符号。

现在解释器中的美元符号还有另一个常见含义:jQuery 对象,其名称只要由一个美元符号 ($) 组成。这是从早期的 Javascript 框架(如 Prototype)借用的约定,如果 jQuery 与其他此类框架一起使用,则会出现名称冲突,因为它们都将使用名称 $(可以将 jQuery 配置为使用不同的名称作为它的名称)全局对象)。 Javascript 中没有什么特别的地方可以让 jQuery 使用单个美元符号作为其对象名。如上所述,它只是另一个有效的标识符名称。

【讨论】:

  • 您不能与此 var $j = jQuery.noConflict(); 冲突 jQuery 对象,现在 $j 是 jQuery 对象。
【解决方案5】:

美元符号用于ecmascript2015-2016 作为“模板文字”。 例子:

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

这里的工作示例:https://es6console.com/j3lg8xeo/注意这个标志“`",它不是正常的引号。

你也可以在与图书馆合作时遇到$jQuery.

$登录常用表达表示行尾。

【讨论】:

  • 美元符号的这种用法没有出现在问题中。这是这个答案从其他地方移到这里的结果吗?
【解决方案6】:

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

作为后缀(如“item$”,发音为“items”),它可以表示诸如 DOM 元素之类的可观察对象,其约定称为 "Finnish Notation",类似于匈牙利符号。

【讨论】:

    【解决方案7】:

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

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

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

    进一步阅读可以在:http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

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

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。
    • ... @TartanLlama 如果您将我的答案降级,请阅读我更新的答案。谢谢你。
    • 不是我!我只是标记了它。
    • ......好的,拒绝投票的人,请解释原因并阅读我编辑的答案。谢谢你。
    • ... @TartanLlama 这只是(再次)证明 Stackoverflows 匿名降级功能已被破坏。用可接受的答案回答旧问题对我来说是可以的,因为我自己发现在浏览答案时查看其他答案很有用。
    【解决方案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】:

        我可能会补充一点,将它用于 jQuery 可以让你做这样的事情,例如:

        $.isArray(myArray);
        

        【讨论】:

          【解决方案11】:

          我的回答是这里缺乏技术上的复杂性,甚至使用了像“技术”这样的词,这些词实际上不在字典中,但很少使用,比如“易受骗”这个词也找不到字典。

          除了所有这些:这是我对一个简单问题的简单回答,以一种简单的方式来回答这样一个非常复杂的问题,而对像这样的空洞问题的简单空洞回答是这样的:

          $('#ident') 的东西说“document.getElementById('ident')。

          $('.classname') 的东西说“document.getElementByClass('classname')。

          是的,我知道没有 getElementByClass ,但这就是人们在使用 $ 符号时所说的,就像 jQuery 语法一样。现在你知道答案了,我敢打赌你仍然不知道如何问这个问题。那么现在你不必为了理解 jQuery babel 而学习 jQuery 对吗?请给我+10!

          【讨论】:

          • 您实际上可以通过document.querySelector() 的 CSS 类获取元素。
          猜你喜欢
          • 1970-01-01
          • 2014-04-10
          • 2021-10-09
          • 2018-09-11
          • 2010-11-05
          • 2011-03-28
          • 2015-10-23
          相关资源
          最近更新 更多