未引入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
相关产品推荐
相关产品推荐

