什么是Javascript中的美元符号(如果不是jQuery)


86

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

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

1)几年前未分配美元符号是否正确,还是我记得错了吗?

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

Answers:


122

1)几年前未分配美元符号是否正确,还是我记得错了吗?

没错,但仍然如此。

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

FirefoxChrome实施$$$以及其他一些作为辅助命令。两者都将设置$$document.querySelectorAll(),如果尚未定义则设置$为。document.querySelectorwindow.$

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


31
好,那真是令人讨厌。这只是让人感到困惑,因为它看起来像jquery,但在任何地方都找不到。我猜一旦您知道它正在进行可能会很方便,但它确实只是令人困惑并且可能掩盖错误。
mike nelson

1
不确定何时被其他浏览器采用,但是我看到它在IE11和Edge上也可用。
isapir

那么人们如何知道它是否是jquery?例如,您导入了一个可能合并了其他一些库的大型库,您想知道jquery是否在那里。请帮忙。
Martian2049年

2
@ Martian2049我认为真正的jQuery会做出回应$.fn.jquery
mb21 '18

2
@Gaspacchio那应该是另一个答案。但是,请记住,此问题$未在模板文字使用。
Zeta,

11

就像下划线一样,这对翻译人员没有任何意义

根据ECMAScript规范:

标识符中的任意位置都可以使用美元符号($)和下划线(_)。美元符号仅适用于机械生成的代码。

您还可以检查JavaScript美元符号($)-它的作用是什么?

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

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

编辑:-

实际上,美元符号功能实际上已成为或多或少的快捷方式document.getElementById()

要确认我的观点,请检查以下内容

$(选择器)

返回与给定CSS选择器匹配的单个元素。在旧的Firebug版本中,该功能过去等效于 document.getElementById


该博客链接现在已失效。
Victor Zamanian

答案的第一部分是不相关的,第二部分在现代浏览器的上下文中是过时的和错误的。
user4642212

7

Dollar sign($) 未分配,但某些浏览器添加了特殊用途的功能。

与Google Chrome一样,如果您$在控制台上输入,它将返回:

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

该功能已分配给Google Chrome开发者工具,使调试更加轻松。

如果输入$('div'),它将返回类似以下的内容:

e.fn.e.init[178]

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

顺便说一句,单击鼠标右键选择元素后,您可以$scope在控制台上按类型访问angular.js范围


4

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

document.querySelectorAll("p") instanceof NodeList // true

$$("p") instanceof NodeList // false

Array.isArray($$("p")) // true

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


1

它可以是任何值,也可以$是有效的变量名,就像dollar

ECMAScript

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

查看其含义和定义位置的最简单解决方案可能是在该行上键入$()并在其中放置一个断点


1

只是为了完成此处的其他答案,MooTools还将$用作的别名document.getElementById

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

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.