【问题标题】:What is the dollar sign in Javascript, if not jQuery如果不是 jQuery,Javascript 中的美元符号是什么
【发布时间】:2025-12-02 13:15:01
【问题描述】:

几年前我做了一些 javascript / jQuery 编程,我刚刚重新开始。那时美元符号用于所有 jQuery 功能,如果没有导入 jQuery 库,则没有定义美元符号。

今天,我在一个完全空的没有 javascript 库的 html 文件中启动了 Firefox,但美元符号指向了一些东西。如果我打开 Firefox 控制台并输入 '$',我会得到 "function()"

1) 几年前没有分配美元符号是正确的,还是我记错了?

2) 如果不是 jQuery,美元符号是什么?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    1) 几年前没有分配美元符号是正确的,还是我记错了?

    这是正确的,仍然是正确的。

    2) 如果不是 jQuery,美元符号是什么?

    FirefoxChrome 实现 $$$ 和其他几个作为辅助命令。两者都将$$ 设置为document.querySelectorAll(),如果window.$ 尚未定义,则将$ 设置为document.querySelector

    因此,您看到的实际上并不是标准 JavaScript,而是浏览器开发者控制台中的帮助程序。它也不是 jQuery(只要您不在使用 jQuery 的页面上)。但是,它的行为接近于jQuery 之一,因为querySelector(用于单个匹配)和querySelectorAll(用于多个匹配)给您几乎与jQuery 选择器相同的强度。

    【讨论】:

    • 好吧,这真的很烦人。它只是让人感到困惑,因为它看起来像 jquery 在那里,但你在任何地方都找不到它。我想一旦你意识到它正在发生,它可能会很方便,但它真的只是令人困惑并且可能掩盖错误。
    • 不确定它何时被其他浏览器采用,但我看到它在 IE11 和 Edge 上也可用。
    • @Martian2049 我认为真正的 jQuery 会回复 $.fn.jquery
    • @Gaspacchio 那应该是另一个答案。但是,请记住,$ 未在 此问题中的模板文字中使用。
    • 目前,Chrome 至少似乎将$() 视为document.querySelectorAll(),与$$() 完全相同。这更接近于 jQuery 的 $() 函数的工作原理。
    【解决方案2】:

    它对解释器没有任何意义,就像下划线一样

    来自 ECMAScript 规范:

    美元符号 ($) 和下划线 (_) 可以在任何地方使用 一个标识符。美元符号仅用于 机械生成的代码。

    您也可以查看JavaScript Dollar Sign ($) - What is it for?

    按照惯例,美元符号 ($)、下划线 (_) 甚至一些 ASCII 字符被允许在 JavaScript 中的任何地方使用 标识符(来源:Ecma 脚本文档(7.6 标识符, ECMA-262, 3rd Ed.) 美元符号仅用于 机械生成的代码。 这意味着我们不想使用 标识符名称中的美元符号 ($),除非我们正在编写 框架。以下是允许的字符列表 在标识符名称中的任何位置使用:

    IdentifierName ::
    IdentifierStart
    IdentifierName IdentifierPart
    IdentifierStart ::
    UnicodeLetter
    $
    _
    UnicodeEscapeSequence
    IdentifierPart ::
    IdentifierStart
    UnicodeCombiningMark
    UnicodeDigit
    UnicodeConnectorPunctuation
    UnicodeEscapeSequence
    

    编辑:-

    实际上,美元符号函数已或多或少成为document.getElementById() 的事实上的捷径。

    确认我的点检查this

    $(选择器)

    返回与给定 CSS 选择器匹配的单个元素。 在旧 Firebug 版本,这曾经相当于 document.getElementById.

    【讨论】:

    • 那个博客链接现在失效了。
    • 答案的第一部分无关紧要,第二部分在现代浏览器的上下文中已过时且错误。
    【解决方案3】:

    Dollar sign($)没有被赋值,但是一些浏览器添加了特殊用途的功能。

    和谷歌浏览器一样,如果你在控制台输入$,它会返回:

    function $(selector, [startNode]) { [Command Line API] }
    

    此功能专为谷歌浏览器开发者工具而设,让调试更轻松。

    如果您输入$('div'),它将返回如下内容:

    e.fn.e.init[178]
    

    并在其中包含每个 div DOM 对象。

    顺便说一句,鼠标右键选择元素后,可以在控制台输入$scope访问angular.js作用域

    【讨论】:

      【解决方案4】:

      请注意,$$ 并不完全是 document.querySelectorAll,因为与该函数不同,它不会返回 NodeList

      document.querySelectorAll("p") instanceof NodeList // true
      
      $$("p") instanceof NodeList // false
      
      Array.isArray($$("p")) // true
      

      所以$$(selector) 真的更像Array.from(document.querySelectorAll(selector))。这意味着像map 和朋友这样的数组方法,而不仅仅是forEach,在使用$$ 时可用,这实际上非常有用。

      【讨论】:

        【解决方案5】:

        它可以是任何东西,因为$ 是一个有效的变量名,就像dollar

        来自ECMAScript

        Identifier ::
        IdentifierName but not ReservedWord
        
        IdentifierName ::
        IdentifierStart
        IdentifierName IdentifierPart
        
        IdentifierStart ::
        UnicodeLetter
        $
        _ 
        \ UnicodeEscapeSequence
        

        查看它是什么以及在哪里定义的最简单的解决方案可能是在这一行输入$()put a breakpoint

        【讨论】:

          【解决方案6】:

          为了完成这里的其他答案,MooTools 还使用$ 作为document.getElementById 的别名。

          它会检查$ 是否被占用,然后默认为document.id

          【讨论】:

            最近更新 更多