几年前我做了一些javascript / jQuery编程,我刚刚重新开始。当时美元符号用于所有jQuery功能,如果没有导入jQuery库,则未定义美元符号。
今天,我启动了Firefox,在一个没有javascript库的完全空的html文件中,然而美元符号指向了什么。如果我打开Firefox控制台并输入'$',我会得到"function()"
。
1)几年前没有分配美元符号,或者我记得错了吗?
2)美元符号是什么,如果不是jQuery?
答案 0 :(得分:98)
1)几年前没有分配美元符号,或者我记得错了吗?
这是正确的,仍然是真的。
2)如果不是jQuery,美元符号是什么?
Firefox和Chrome实施$
,$$
和其他几个作为帮助程序命令。如果$$
尚未定义,则两者都会将document.querySelectorAll()
设置为$
,并将document.querySelector
设置为window.$
。
所以你所看到的实际上并不是标准的JavaScript,而是浏览器开发者控制台中的助手。它也不是jQuery(只要你不在使用jQuery的页面上)。但是,它的行为接近jQuery
的行为,关于querySelector
(对于单个匹配)和querySelectorAll
(对于多个匹配)提供与jQuery选择器几乎相同的强度。
答案 1 :(得分:12)
对于解释器而言,就像下划线
一样来自ECMAScript规范:
美元符号($)和下划线(_)在任何地方都是允许的 标识符。美元符号仅供用于 机械生成的代码。
您也可以查看JavaScript Dollar Sign ($) - What is it for?
按照惯例,美元符号($),下划线(_)甚至一些 允许在JavaScript中的任何位置使用ASCII字符 identifier(来源:Ecma Script文档(7.6标识符, ECMA-262,第3版。)美元符号仅供用于 机械生成的代码。这意味着我们不想使用 我们的标识符名称中的美元符号($),除非我们正在写一个 框架。以下是可以使用的允许字符列表 在标识符名称中的任何位置使用:
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
UnicodeEscapeSequence
修改: - 强>
实际上,美元符号功能已成为document.getElementById()
或多或少的事实上的快捷方式。
要确认我的观点,请检查 this :
<强> $(选择器)强>
返回与给定CSS选择器匹配的单个元素。 在旧 Firebug版本,这曾经相当于 的的document.getElementById 强>
答案 2 :(得分:6)
Dollar sign($)
未分配,但某些浏览器添加了特殊用途的功能。
与谷歌浏览器一样,如果您在控制台上键入$
,它将返回:
function $(selector, [startNode]) { [Command Line API] }
此功能已分配给Google Chrome开发者工具,让调试更加轻松。
如果您输入$('div')
,它将返回如下内容:
e.fn.e.init[178]
并在其中包含每个div
DOM对象。
顺便说一句,单击鼠标右键选择元素后,您可以在控制台上按类型$scope
加入angular.js范围
答案 3 :(得分:5)
请注意$$
不是document.querySelectorAll
,因为与该函数不同,它不会返回NodeList
:
document.body.querySelectorAll('p') instanceof NodeList
true
$$('p') instanceof NodeList
false
Array.isArray($$('p'))
true
所以$$(selector)
更像是Array.from(document.querySelectorAll(selector))
。这意味着像.forEach
和朋友这样的数组方法可以在$$
上使用,这实际上非常有用。
答案 4 :(得分:1)
可能是任何内容,因为$
是有效的变量名称,就像dollar
一样。
来自ECMAScript:
Identifier ::
IdentifierName but not ReservedWord
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence
查看它是什么以及定义它的位置的最简单的解决方案可能是在此行上键入$()
和put a breakpoint。
答案 5 :(得分:0)
为了完成其他答案,MooTools还使用$
作为document.getElementById
的别名。
检查$
是否已被采用,然后默认为document.id
。