公告指出,4.0 中很多破坏性变更都是团队多年来一直想做的,但却无法在补丁或小版本中实现的。
新版本删减了遗留代码,移除了一些以前已经弃用的 API,移除了一些从未记录在案的 public functions 的 internal-only 参数,并放弃了对一些过于复杂的 "magic" 行为的支持。
一些更新内容包括:
Goodbye IE<11
不再支持 IE 10 及更早版本。按照分阶段取消支持计划,预计下一步将在 jQuery 5.0 中取消对 IE 11 的支持。
同时还放弃了对其他旧版浏览器的支持,包括 Edge Legacy、iOS <11、Firefox <65 和 Android 浏览器。对于还有需要的用户,则可以选择继续坚持使用 jQuery 3.x。
删除已弃用的 API
-
jQuery.cssNumber
-
jQuery.cssProps
-
jQuery.isArray
-
jQuery.parseJSON
-
jQuery.nodeName
-
jQuery.isFunction
-
jQuery.isWindow
-
jQuery.camelCase
-
jQuery.type
-
jQuery.now
-
jQuery.isNumeric
-
jQuery.trim
-
jQuery.fx.interval
删除了 push, sort 以及 splice
jQuery 原型中的 Array 方法 push, sort 以及 splice 已经被删除。这些方法的行为与任何其他 jQuery 方法不同,并且始终是 internal-use only。目前,这些方法已转换为等效的 Array 函数。例如,$elems.push( elem ) 变成了 [].push.call( $elems, elem )。
focusin 和focosout event order
长期以来,浏览器对 focus 和 blur 事件的顺序(包括 focusin、focusout、focus 和 blur)并不一致。jQuery 4.0 支持的所有浏览器的最新版本都趋向于统一事件顺序。但是它与 jQuery 多年前选择的一致顺序不同,所以促使这一改变变成了一个破坏性的变更。
jQuery 在以前的版本中对所有四个事件的顺序是:
-
focusout
-
blur
-
focusin
-
focus
从 jQuery 4.0 开始,不再 override native behavi。这意味着除 IE 之外的所有浏览器都将遵循当前的 W3C 规范,即:
-
blur
-
focusout
-
focus
-
focusin
除 Internet Explorer 之外的所有浏览器都将遵循当前的 W3C 规范。
FormData 支持
jQuery.ajax 添加了对二进制数据的支持,包括 FormData。
此外,jQuery 4.0 还删除了自动 JSONP 升级、将 jQuery source 迁移至 ES 模块;以及添加了对 Trusted Types 的支持,确保以 TrustedHTML 封装的 HTML 能以不违反 require-trusted-types-for 内容安全策略指令的方式用作 jQuery 操作方法的输入。
由于删除了 Deferreds 和 Callbacks(现在压缩后不到 20k 字节),jQuery 4.0.0 的 slim build 变得更加小巧。