jQuery 4.0.0 震撼发布:20 岁老树脱皮回春!


jQuery 4.0.0 正式发布,移除 IE10 及更老浏览器支持,砍掉大量过时 API,全面拥抱现代 Web 标准,体积更小、结构更现代,还支持 Trusted Types 和 ES 模块。

如果你只记住一句话,那就是:jQuery 4.0 并不是在“加新功能”,而是在“清理历史债务”。

这次升级的核心思想非常简单,就是趁着一个大版本的机会,把那些已经没人真正需要、但又一直拖着不敢删的老代码、老 API、老浏览器支持,一次性清掉。

这不是一次情绪化的“推倒重来”,而是一个持续了很多年的技术决策结果。很多被删掉的东西,其实 jQuery 团队早就想删,只是以前不敢,因为一删就可能让大量老项目直接炸锅。而现在,浏览器环境、JavaScript 标准、构建工具都已经完全不一样了,再不清理,jQuery 自己就会被历史拖死。

所以你可以把 jQuery 4.0 理解成一句话:这是一个“终于可以放心不再照顾古董用户”的版本。


jQuery 终于满 20 岁了,它决定“断舍离”一次

2006 年 1 月 14 日,一个叫约翰·雷西格的程序员在纽约一场叫 BarCamp 的极客聚会上,悄悄扔出了一段 JavaScript 代码——没人想到,这玩意儿后来成了 Web 开发界的“万能胶水”,名字就叫 jQuery。

二十年过去,无数网站靠它活下来,无数前端新手靠它入门,甚至有人说“不会 jQuery 就不算前端”。

但时代变了,浏览器早就不是当年那个连个 div 居中都要哭半天的破烂玩意儿了。

所以,2026 年 1 月,jQuery 团队终于憋出大招:4.0.0 正式版!这不是小修小补,而是一次彻底的“断舍离”——把那些拖后腿的老古董功能、过时 API、IE 兼容代码统统扔进历史垃圾桶。

别担心,它没死,反而变得更轻、更快、更现代,就像一个中年大叔剃了胡子、换了西装,重新走进写字楼,但眼神里还是那股熟悉的靠谱劲儿。

再见了,IE 老伙计,你该退休了

最狠的一刀,砍向了 Internet Explorer。

jQuery 4.0.0 直接宣布:IE 10 及更老版本?不伺候了!连 Edge Legacy(就是那个非 Chromium 内核的旧版 Edge)也一并踢出门。

为啥留着 IE11?团队说了,这是“分阶段撤退”——先清掉最老的,等 5.0 再彻底干掉 IE11。

这其实很聪明,毕竟还有些政府或银行系统死抱着 IE11 不放,一下子全砍容易引发“血案”。

但对绝大多数开发者来说,这简直是天降福音。以前为了兼容 IE8,得写一堆 if (isIE) { ... } 的鬼代码,现在终于可以删干净了!而且不只是 IE,连 iOS 三年前的版本、Firefox 两个大版本之前的、Android 原生浏览器这些“数字化石”也都被扫地出门。

如果你的项目必须跑在这些老设备上?那就乖乖用 jQuery 3.x 吧,别硬上 4.0,否则网页可能直接变白板。

被砍掉的“祖传 API”清单,看看你中了几枪

jQuery 4.0.0 干掉了一长串曾经“人人喊打”但又不敢删的函数。

比如 jQuery.isArray、jQuery.trim、jQuery.now、jQuery.isFunction……这些 API 其实早在几年前就被标记为“deprecated”(废弃),因为现代浏览器原生就有 Array.isArray()、String.prototype.trim()、Date.now() 等等,又快又标准。jQuery 自己再包一层纯属多余,还占体积。这次借着大版本更新,团队终于痛下杀手,一口气全删了。

如果你的代码里还在用 $.trim(str),赶紧改成 str.trim();用 $.now()?换成 Date.now()。改起来不难,但好处巨大:整个库 gzipped 后比 3.x 小了超过 3KB!别小看这 3KB,在移动端或弱网环境下,可能就是快 0.1 秒加载的关键。

另外,像 jQuery.fx.interval 这种控制动画帧率的内部参数也被移除——现在浏览器都用 requestAnimationFrame 了,谁还手动调间隔?


安全这件事终于被正经对待:支持 Trusted Types,堵住 CSP 漏洞

现代网站越来越重视安全,Content Security Policy(CSP,内容安全策略)成了标配。但 jQuery 以前用 innerHTML 插入 HTML 字符串时,容易触发 CSP 报错。

4.0.0 加入了对 Trusted Types 的支持——这是 Google 主导的一项安全标准,要求所有动态插入的 HTML 必须经过“可信包装”。

现在,如果你的环境启用了 require-trusted-types-for 'script',jQuery 会自动检查输入是否为 TrustedHTML 类型,避免违规。

同时,jQuery 对异步脚本加载的实现也做了调整。以前有些地方用 XHR,有些地方用 script 标签,现在尽量统一使用 script 标签,避免 CSP 对内联脚本的限制。

有个细节特别重要:如果你给 AJAX 请求传 headers 参数,jQuery 还是会用 XHR,这是浏览器能力限制,不是 jQuery 任性。官方也很直接地告诉你:如果你只是想控制 script 属性,用 scriptAttrs。

这段话的潜台词是:别再乱搞黑魔法了,现代浏览器已经有明确的安全规则。


焦点事件顺序终于跟上 W3C 了,但你的代码可能要翻车

focus 和 blur 的事件顺序,是前端历史上一个非常阴间的问题。浏览器不一致,IE、Chrome、Firefox 各自为政,标准还改过。

jQuery 当年为了“统一体验”,自己定了一套顺序:focusout → blur → focusin → focus。
现在问题来了:所有现代浏览器终于统一了,但顺序和 jQuery 老逻辑不一样。没想到,W3C 后来居然采纳了 Chrome/Firefox 的那一套,变成:blur → focusout → focus → focusin。

jQuery 4.0 的艰难选择是:不再强行覆盖浏览器行为,直接跟着 W3C 走。直接跟随浏览器原生行为,于是这成了一个破坏性变更。
也就是说,除了 IE11(它永远活在自己的世界里),其他所有支持的浏览器现在都按 W3C 新标准走。如果你的代码依赖旧的事件顺序(比如在 blur 里阻止 focusout),那升级后可能逻辑错乱。好在 jQuery Migrate 插件能帮你检测这类问题,控制台会打出警告,告诉你“兄弟,这里要改了”。

历史就这样完成了闭环。

slim 版继续瘦身:Deferred 和 Callbacks 退场

jQuery 一直有个“Slim Build”(精简版),砍掉了 Ajax 和动画效果模块,适合那些只用 jQuery 操作 DOM 的项目。slim 版 jQuery 本来就是给“我只想用 DOM 操作”的人准备的。现在它更瘦了,Deferred 和 Callbacks 被直接移除。

原因也很简单:Promise 早就原生支持了,除了 IE11。Deferred 的确有额外功能,但大多数项目根本用不到。

如果你还要支持 IE11,那就别用 slim;如果不用,那 slim 版体积已经小到基本不构成性能瓶颈。

这是一次非常理性的取舍。


jQuery 原型上的“私房菜”被端走了

有个冷知识:jQuery 对象(比如 $('div') 返回的那个)其实偷偷继承了数组的 push、sort、splice 方法。但这些方法从来就不是给用户用的,只是内部实现时图方便“借”来的。

结果有些胆大的开发者真拿 $elems.push(elem) 来往 jQuery 对象里塞元素,搞得团队哭笑不得。

这次 4.0.0 直接把这些“私房菜”从原型上端走。如果你之前这么干过,别慌,有替代方案:用 [].push.call($elems, elem)。原理是借用原生数组的 push 方法,强行作用在 jQuery 对象上。虽然写法丑了点,但至少能跑。不过最好还是用标准的 .add() 或 .pushStack() 方法,这才是正道。

代码搬家:从 AMD 到 ES Modules,终于跟上时代

jQuery 的源码结构也迎来巨变。过去它用 AMD(Asynchronous Module Definition)规范组织代码,依赖 RequireJS 才能直接 import。

但如今主流构建工具(Webpack、Vite、Rollup)都拥抱 ES Modules(ESM)。4.0.0 彻底迁移到 ESM,意味着你可以直接在现代项目里写 import $ from 'jquery',不用再折腾配置。

团队还换了打包工具,从 Grunt + RequireJS 换成 Rollup,不仅构建更快,还能单独运行 ESM 版本的测试。

更酷的是,现在你甚至能在 HTML 里用 script type="module" 直接引入 jQuery 的 ESM 版本,完全绕过 npm。这对想快速试用新特性的开发者来说,简直不要太爽。

升级指南:别慌,有 Migrate 插件兜底

听到这么多 breaking changes(破坏性变更),你可能吓得手抖。别怕!jQuery 团队早有准备:同步发布了 jQuery Migrate 4.0.0 插件。

只要在引入 jQuery 4.0.0 后再加一行script src="jquery-migrate-4.0.0.js",它就会自动恢复大部分被删的 API,并在控制台打印详细警告,告诉你“某某函数已废弃,请改用某某”。

比如你用了 $.trim,控制台会说:“Hey!$.trim 已移除,请用 str.trim() 替代”。这样你就能边跑边改,逐步迁移。等所有警告都清掉,再把 Migrate 插件删了,完美过渡。官方还写了详细的升级指南,列出了所有变更点和替代方案,堪称“续命手册”。

下载与使用:CDN 和 npm 都已就绪

jQuery 4.0.0 已上线官方 CDN 和 npm。你可以直接用:
https://code.jquery.com/jquery-4.0.0.js  
https://code.jquery.com/jquery-4.0.0.min.js  

或者 Slim 版:
https://code.jquery.com/jquery-4.0.0.slim.js  

npm 用户则运行:
npm install jquery@4.0.0

安装后,在 node_modules/jquery/dist/ 目录下能找到完整版、Slim 版、压缩版和 map 文件。注意:第三方 CDN(如 cdnjs、jsDelivr)可能需要几天同步,着急的话先用官方 CDN。另外,所有文件都支持 Subresource Integrity(SRI),记得在 script 标签里加上 integrity 属性,防止 CDN 被劫持。

致谢:一群极客的二十年热血

最后,jQuery 团队列出了近百位贡献者的名字,从 Alex 到 ygj6,跨越五大洲。特别提到在达拉斯举办的 20 周年 reunion,连创始人约翰·雷西格都远程 Zoom 参与。这篇文章就是在聚会现场发布的——一群白发或秃顶的程序员,围着蛋糕庆祝一个开源项目的生日。这不仅是技术的胜利,更是社区精神的体现。jQuery 也许不再是“最潮”的框架,但它教会了千万人如何与 DOM 和谐共处,这份遗产,值得敬一杯。

总结:老树开新花,jQuery 依然值得信赖

jQuery 4.0.0 不是一次“回光返照”,而是一场精心策划的“中年转型”。它勇敢地割掉历史包袱,拥抱现代 Web 标准,同时保留了最核心的易用性和可靠性。

jQuery 4.0 没有追热点,没有造新概念,没有喊“颠覆”。它只是认真地做了一件事:把一个 20 岁的基础库,整理成一个还能继续活下去的现代项目。