一、概述

根据官方公告和技术报道,jQuery 4.0.0 已于近期发布,这是近十年来的首个主版本更新。它的核心目标是清理历史包袱,全面拥抱现代Web标准。

二、主要更新内容

1.1 浏览器拥护的重大变更

放弃对 IE10 及更早版本的协助:这是最根本的变更。jQuery 4.0 的代码将不再为这些旧浏览器给予兼容性处理。官方计划在未来的 jQuery 5.0 中彻底放弃对 IE11 的支持。

1.2 安全性与标准的升级

  • 支持 Trusted Types:重要针对使用严格内容安全策略(CSP)的环境,有助于防止跨站脚本(XSS)攻击,并减少由jQuery引起的CSP违规报告。

  • 遵循最新的 W3C 焦点事件规范:focusin 和 focusout 事件的触发顺序已更新,现在的标准顺序是:blur → focusout → focus → focusin。这可能会影响依赖旧有事件顺序的代码。

1.3 API 的清理与移除

  • jQuery 4.0 移除了以下在早期版本中已被标记为“废弃”(deprecated)的辅助函数(共13个),它们在现代 JavaScript 中均有原生替代方案:

  • jQuery.isArray (请使用 Array.isArray())

  • jQuery.isFunction (使用 typeof 判断)

  • jQuery.isWindow

  • jQuery.camelCase

  • jQuery.nodeName

  • jQuery.trim (请运用 String.prototype.trim())

  • jQuery.type (利用 typeof 和 Object.prototype.toString.call())

  • jQuery.isNumeric (考虑应用 Number.isFinite() 或正则校验)

  • jQuery.proxy (请使用 Function.prototype.bind() 或箭头函数)

  • jQuery.holdReady

  • jQuery.unique (已更名为 jQuery.uniqueSort)

  • jQuery.expr[“:”] 中的部分旧位置选择器(如 :hidden 的部分旧逻辑已更新)

  • 部分仅供内部使用的数组方法(如 .push, .sort, .splice 等),不应在用户代码中直接调用。

1.4 架构与打包方式的现代化

  • 源码迁移至 ES Modules:jQuery 的内部源码已从 AMD 模块系统改为使用原生的 ES Modules 编写,并利用 Rollup 进行打包。这使得它能更好地与现代前端构建工具(如 Webpack、Vite)和原生支持 ESM 的浏览器环境集成。

1.5 Slim 版本的进一步精简

  • jQuery Slim 版移除了 Deferred 和 Callbacks 模块。这是为了进一步减小体积(gzip后约19.5KB)。假如项目得使用 $.ajax 或 $.when 等基于 Deferred 的功能,则必须启用完整版。

1.6 其他重要的行为变更

  • 布尔属性处理更符合标准:对于 checked、selected、disabled 等布尔属性,.attr() 方法的行为发生了变化,现在更严格地遵循 HTML 标准。在某些情况下,你可能需要使用 .prop() 方法来替代。

  • 移除 JSONP 的自动转换:出于安全考虑,jQuery.ajax 不再自动将 URL 中的 callback=? 参数转换为 JSONP 请求。如果需要使用 JSONP,必须显式地在 dataType 选项中指定。

  • 更好地拥护二进制数据:jQuery.ajax 方法现在能更好地处理 FormData、ArrayBuffer、Blob 等二进制数据对象。

三、升级建议总结

  • 首要检查浏览器兼容性:如果你的项目得支持 Internet Explorer 10 或更早版本,绝对不能升级到 jQuery 4.0,应停留在 3.x 版本。

  • 务必采用迁移工具:升级时,强烈建议同时使用官方的 jQuery Migrate 插件。它会将被移除的API在控制台中以警告形式列出,是升级调试的必备工具。

  • 逐项检查代码:重点检查并替换上述被移除的辅助函数,同时审查布尔属性操作、焦点事件顺序和 AJAX 请求(特别是JSONP)相关的代码。

  • 理解版本定位:jQuery 4.0 是一次现代化“瘦身”和规范化更新,旨在为仍需采用 jQuery 的现代项目提供更干净、更标准的代码库,并非用于吸引新工程。

在这里插入图片描述