都 6202 年了,AI 正席卷全球,接管一切时,jQuery 终于发布 4.0 !
jQuery 4.0.0 终于在 2026 年 1 月 17 日正式发布,停止支持 Internet Explorer 10 及更老的浏览器,砍掉大量过时 API,全面拥抱现代 Web 标准,体积更小、结构更现代,还支持 Trusted Types 和 ES 模块。
可以说,jQuery 4.0 并不是在加新功能,而是趁着一个大版本的机会,把那些已经没人真正需要、但又一直拖着不敢删的老代码、老 API、老浏览器支持,一次性清掉。

jQuery 20 岁了
2006 年 1 月 14 日,John Resig 在纽约的 BarCamp 大会上推出 jQuery 时,它立刻成为 Web 开发界的“万能胶水”,当时前端开发需要为 Internet Explorer、Firefox 和 Safari 等不同的浏览器编写不同的代码,而 jQuery 消除了这些差异,使 Web 开发变得轻松许多,无数网站靠它活下来。

上图是 jQuery 开发团队 20 周年合影,后面视频中的是 John Resig,看来开发者都有一定岁数了。😂
时至今日,jQuery 依然是网络上运行时间最长、最具影响力的 JavaScript 库之一,根据 BuiltWith 的统计数据,排名前 100 万的网站中超过 60% 以某种方式使用 jQuery,可能其中最大的原因是 WordPress 内置了 jQuery:

但时代变了,浏览器早就不是当年那个连个 div 居中都要哭半天的破烂玩意儿了,现代浏览器拥有统一的 API,原生 JavaScript 包含了 querySelector()、fetch() 和 Promise —— 这些曾使 jQuery 成为必备库的特性如今都已内置。
所以 jQuery 团队终于憋出大招:4.0.0 正式版,这不是小修小补,而是一次彻底的「断舍离」——把那些拖后腿的老古董功能、过时 API、IE 兼容代码统统扔进历史垃圾桶。
移除 IE<11 支持
jQuery 4.0 不再支持 IE 10 及更早版本,连 Edge Legacy(就是那个非 Chromium 内核的旧版 Edge)也不再支持了,此外连 iOS 三年前的版本、Firefox 两个大版本之前的、Android 原生浏览器这些“数字化石”同时一并被扫地出门。
有些人可能会问,为什么 IE 11 还被留着,jQuery 团队说先干掉最老的,等 jQuery 5.0 再彻底干掉 IE11。所以还会有 jQuery 5.0 ?
毕竟还有一些政府和银行系统死抱着 IE11 不放,一下子全砍很容易引起“血案”,不过这类网站也基本不会升级。😂
如果你的项目还跑在老旧设备上,用着这些过时的浏览器,那还是乖乖用 jQuery 3.x 吧,别硬上,没事别升级。
移除弃用 API
jQuery.isArray,jQuery.parseJSON,jQuery.trim,jQuery.type,jQuery.now,jQuery.isNumeric,jQuery.isFunction,jQuery.isWindow,jQuery.camelCase,jQuery.nodeName,jQuery.cssNumber,jQuery.cssProps 和 jQuery.fx.interval。
这些函数已弃用多个版本,要么原本就是内部函数,要么浏览器都已提供了原生替代函数,比如:
Array.isArray(),JSON.parse(),String.prototype.trim() 和 Date.now() 等。
jQuery 自己再包一层纯属多余,还占体积,这次借着大版本更新,终于痛下杀手,一口气全删了,移除这些废弃 API 以及移除支持旧版 IE 的代码,结果就是压缩后的文件大小比 3.x 版本少了超过 3KB,别小看这 3KB,在移动端或弱网环境下,可能就能比原来快 0.1 秒。
此外 jQuery 原型中还移除了仅供内部使用的方法,有个冷知识,jQuery 对象其实偷偷继承了数组的 push、sort、splice 方法,这些方法与其他 jQuery 方法的行为截然不同,并且一直仅供内部使用。
结果有些胆大的开发者真拿 $elems.push(elem) 来往 jQuery 对象里塞元素,😂,现在这些方法已经从 jQuery 原型中移除。
如果您之前使用这些方法,如果你之前这么干过,别慌,有替代方案,将 $elems.push(elem) 替换为[].push.call($elems, elem)。
原理是借用原生数组的 push 方法,强行作用在 jQuery 对象上,虽然写法丑了点,但至少能跑。不过最好还是用标准的 .add() 或 .pushStack() 方法,这才是正道。
Trusted Types 和 CSP
现代浏览器对安全要求越来越高,Content Security Policy(CSP,内容安全策略)成了标配,jQuery 旧版本用 innerHTML 插入 HTML 字符串时,容易触发 CSP 报错。
jQuery 4.0 增加了对 Trusted Types 的支持,确保用 TrustedHTML 包装的 HTML可以作为 jQuery 操作方法的输入,而不会违反 require-trusted-types-for 内容安全策略指令。
同时,jQuery 对异步脚本加载的实现也做了调整,以前有些地方用 XHR,有些地方用 script 标签,现在尽量统一使用 script 标签,避免 CSP 对内联脚本的限制。
有个细节特别重要:如果你给 AJAX 请求传 headers 参数,jQuery 还是会用 XHR,这是浏览器能力限制,不是 jQuery 任性,如果你只是想控制 script 属性,用 scriptAttrs,所以别再乱搞黑魔法了,现代浏览器已经有明确的安全规则。
从 AMD 到 ES Modules
jQuery 的源码结构也迎来巨变,过去它用 AMD(Asynchronous Module Definition)规范组织代码,依赖 RequireJS 才能直接 import,
但如今主流构建工具(Webpack、Vite、Rollup)都拥抱 ES Modules(ESM),jQuery 4.0 彻底迁移到 ESM,意味着你可以直接在现代项目里写 import $ from 'jquery',不用再折腾配置。
团队还换了打包工具,从 Grunt + RequireJS 换成 Rollup,不仅构建更快,还能单独运行 ESM 版本的测试,现在你甚至能在 HTML 里用 script type="module" 直接引入 jQuery 的 ESM 版本。
焦点事件顺序破坏性变更
focus 和 blur 的事件顺序,是前端历史上一个非常阴间的问题,首先浏览器不一致,IE、Chrome、Firefox 各自为政,并且标准还改过。
所以 jQuery 之前为了“统一体验”,自己定了一套顺序:focusout → blur → focusin → focus。
然后终于所有现代浏览器统一了,但顺序和 jQuery 老逻辑不一样,W3C 也采纳了:blur → focusout → focus → focusin。
所以 jQuery 4.0 决定遵循 W3C 的标准,不再强行覆盖浏览器行为,于是这成了一个破坏性变更,如果你的代码依赖旧的事件顺序(比如在 blur 里阻止 focusout),那升级后可能逻辑错乱。
升级之后看看控制台,jQuery Migrate 插件能帮你检测这类问题,会在控制台输出警告,告诉你这里需要更改了。
slim 版继续瘦身
jQuery 一直有个“Slim Build”(精简版),砍掉了 AJAX 和动画效果模块,适合那些只用 jQuery 操作 DOM 的项目,现在它更瘦了,Deferred 和 Callbacks 也被直接移除,精简版体积进一步缩小,压缩后仅约 19.5KB!
原因也很简单,除了 IE11 都早已原生支持 Promise,Deferreds 确实有一些原生 Promises 不支持的额外功能,但大多数用法都可以迁移到 Promise 方法。如果您需要支持 IE11,最好使用主版本或添加原生 Promises 的 polyfill。
还有 Migrate 插件兜底
jQuery 4.0 已经有破坏性变更,比如之前焦点事件顺序变更,那怎么办?jQuery Migrate 4.0.0 插件同步发布了。
只需引入 jQuery 4.0 之后,继续引入 jQuery Migrate 4.0,就会恢复大部分被删的 API,然后在控制台输出详细警告,比如:某某函数已弃用,请改用某某。这样就可以边跑边改,逐步迁移,直至所有警告都清理了,在删除 Migrate 插件。此外,官方也写了详细升级指南: https://jquery.com/upgrade-guide/4.0/。