You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未引入jQuery时JavaScript中$是否为querySelector别名可直接在代码使用?

结论

2022年及以后也绝对不能在业务JS代码里直接把未手动定义的$当做document.querySelector别名使用,你在浏览器控制台里能直接用$,本质是开发者工具给调试场景做的专属能力,从来不是给页面业务代码用的标准API。

  • 控制台里可用的$属于DevTools命令行工具集的一部分,是浏览器在控制台专属执行上下文里额外注入的辅助函数,和$$(选择多元素)、$0(当前选中的DOM节点)、$_(上一条执行结果)这类工具一样,只在你手动在控制台敲代码执行的时候生效,页面自身加载的业务JS运行上下文里根本没有这个变量,直接写在业务代码里只会抛出$ is not defined的引用错误。你可以在之前的测试HTML里加一段<script>console.log($('#a'))</script>再打开页面,就能直接复现这个报错。
  • 你在caniuse搜不到$的兼容性数据是完全正常的,因为它从来不是ECMAScript标准、也不是DOM标准的一部分,属于浏览器厂商给调试工具做的私有实现,没有任何规范约束它的存在性、行为逻辑:不同浏览器的实现有差异,同一个浏览器不同版本也可能调整相关逻辑,完全没有生产环境依赖的稳定性保障。
  • 全局$是存量代码里占用率极高的变量名,从jQuery到各类第三方工具库,再到业务自定义代码,都可能给全局$赋值,就算未来标准组织想把$做成原生选择器API,也会和海量存量页面产生严重冲突,基本不存在落地的可能。

如果觉得document.querySelector写起来太长想做简写,直接在自己的代码作用域里明确定义别名即可,行为完全可控,没有任何兼容风险:

// 选择单个元素
const $ = sel => document.querySelector(sel);
// 选择多个元素,转成数组方便直接调用map、forEach等方法
const $$ = sel => Array.from(document.querySelectorAll(sel));

内容的提问来源于stack exchange,提问作者Basj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:42:29