[英]What is the dollar sign in Javascript, if not jQuery
几年前我做了一些 javascript / jQuery 编程,然后我又重新开始了。 当时美元符号用于所有 jQuery 功能,如果未导入 jQuery 库,则未定义美元符号。
今天,我在一个没有 javascript 库的完全空的 html 文件中启动了 Firefox,但美元符号指向了某些东西。 如果我打开 Firefox 控制台并输入'$'我得到"function()"
。
1)几年前没有分配美元符号是正确的,还是我记错了?
2) 如果不是 jQuery,美元符号是什么?
1)几年前没有分配美元符号是正确的,还是我记错了?
这是正确的,而且仍然正确。
2) 如果不是 jQuery,美元符号是什么?
Firefox和Chrome实现了$
、 $$
和其他几个作为辅助命令的命令。 两者都将$$
设置为document.querySelectorAll()
,如果window.$
尚未定义,则将$
设置$
document.querySelector
。
因此,您所看到的实际上并不是标准的 JavaScript,而是浏览器开发者控制台中的一个助手。 它也不是 jQuery(只要您不在使用 jQuery 的页面上)。 然而,它的行为接近于jQuery
,关于querySelector
(对于单个匹配)和querySelectorAll
(对于多个匹配)给你几乎与 jQuery 选择器相同的强度。
它对解释器没有任何意义,就像下划线一样
来自 ECMAScript 规范:
美元符号 ($) 和下划线 (_) 可用于标识符中的任何位置。 美元符号仅用于机械生成的代码。
您还可以查看JavaScript 美元符号 ($) - 它是做什么用的?
按照惯例,美元符号($),下划线(_),甚至一些ASCII字符被允许可以在JavaScript标识符(来源任何地方使用:ECMA脚本文件(7.6标识符,ECMA-262,第三版)美元。 sign 仅用于机械生成的代码。这意味着我们不想在标识符名称中使用美元符号 ($),除非我们正在编写框架。以下是可以使用的允许字符列表标识符名称中的任何位置:
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
UnicodeEscapeSequence
编辑:-
实际上,美元符号函数已成为document.getElementById()
或多或少事实上的快捷方式。
为了证实我的观点检查此:
$(选择器)
返回与给定 CSS 选择器匹配的单个元素。 在旧的 Firebug 版本中,这曾经等同于document.getElementById 。
Dollar sign($)
未分配,但某些浏览器添加了特殊用途的功能。
像谷歌浏览器一样,如果你在控制台输入$
,它会返回:
function $(selector, [startNode]) { [Command Line API] }
这个功能分配给谷歌浏览器开发者工具,让调试更容易。
如果您输入$('div')
,它将返回如下内容:
e.fn.e.init[178]
并在其中包含每个div
DOM 对象。
顺便说一句,单击鼠标右键选择元素后,您可以通过在控制台上键入$scope
来访问 angular.js 范围
请注意, $$
并不完全是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
,这实际上非常有用。
它可以是任何东西,因为$
是一个合法的变量名,就像dollar
。
从ECMAScript :
Identifier ::
IdentifierName but not ReservedWord
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence
查看它是什么以及它在哪里定义的最简单的解决方案可能是键入$()
并在此行上放置一个断点。
只是为了完成这里的其他答案,MooTools 还使用$
作为document.getElementById
的别名。
它会检查$
是否被占用,然后默认为document.id
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.