现在大多数浏览器都支持通过jQuery 3.0使用”use strict”,jQuery 就是用这个指令构建的。您的代码不需要在严格模式下运行,所以大多数现有代码不需要做任何修改。我们三年前遇到的一个案件是ASP.NET 4.0使用arguments.caller.callee在其__doPostBack()方法中尝试跟踪调用堆栈。如果你仍然使用仍然这样做的ASP.NET版本,推荐继续使用jQuery 2.x或更早版本。现代浏览器通过error.stack支持堆栈跟踪,所以它不应该有必要检查arguments.caller.callee。
https://github.com/jquery/jquery/pull/3061
https://bugs.jquery.com/ticket/13335
更改:文档就绪(document-ready)处理程序现在是异步的在jQuery中,自jQuery 1.6以来,document-ready 处理由jQuery.Deferred实现提供支持。作为符合 Promises/A+ 规范的jQuery 3.0 队列的一部分,document-ready 处理程序被异步调用,即使是文档当前已经准备就绪,再添加处理程序。这样提供了代码执行顺序的一致性,与文档是否准备就绪无关。例如,考虑这个代码:
$(function(){ console.log("ready"); }); console.log("outside ready");在jQuery 3.0中,将总是log “outside ready”,紧接着是”ready”,不管文档在执行时候是否准备就绪。早期版本可以按任一顺序log消息。
由于处理程序是彼此独立地执行,所以在一个document-ready处理程序中的异常或失败不会阻止其他document-ready处理程序运行。
如果是自定义构建的jQuery,排除了deferred模块,有一种可供选择的document-ready替代品。这个实现支持jQuery.ready promise,但不是一个jQuery.Deferred对象,所以它应该只能通过jQuery.when()使用。
https://github.com/jquery/jquery/issues/1823
https://github.com/jquery/jquery/pull/2891
更改: jQuery.isNumeric() 和自定义的.toString()jQuery.isNumeric()方法旨在与原始数字,以及可以强制转换为有限数字的字符串一起使用。尤其是,它不再尝试从对象的.toString()方法上获取数字。需要对其他数字进行专门检查的用户可以创建自己的验证函数。
https://github.com/jquery/jquery/issues/2662
更改:弃用.context 并且移除.selector属性这些属性在jQuery 1.9中已弃用,因为它们只用于过时的.live()方法,并且从未准确地表示当前集合的上下文或选择器。
https://github.com/jquery/jquery/issues/1908
更改:文档中从未记录的内部方法不再暴露3.0版本从视图中删除了几个方法,意图是私有方法,并且文档中从未记录过:
https://github.com/jquery/jquery/issues/2224
https://github.com/jquery/jquery/issues/2225
更改:空集合上返回 undefined 值除了少数例外,任何有返回值的jQuery方法在空的jQuery集合上应该返回undefined,以符合我们的API指南。以下API已更改,以符合此规则:
以前,这些方法对于空集合返回null而不是undefined。
https://github.com/jquery/jquery/issues/2319
功能:for...of循环可以用于jQuery集合jQuery 3.0支持ES2015中引入的for...of循环。它允许循环迭代对象,包括Array, Map, 和 Set。当使用这个循环时,获得的值是jQuery集合的DOM元素,一次一个。请注意,使用for...of循环请注意支持的环境,支持ES2015或如Babel转换器。这里是一个例子:
var elems = $(".someclass"); // 经典的 jQuery 方式 $.each(function(i, elem) { // 通过 elem (或 "this" 对象)工作 }); // 较漂亮的 ES2015 方式 for ( let elem of elems ) { // 通过 elem工作 }
https://github.com/jquery/jquery/issues/1693
功能:jQuery.ready promise 正式被支持从jQuery版本1.8开始,jQuery.ready已经作为一个类似 promise 的对象被使用(”thenable”在Promise中的术语)。从jQuery 3.0开始,这个对象通过jQuery.when或原生的Promise.resolve()被支持。不要假设这个对象是一个jQuery Deferred或一些其他类型的promise对象,例如原生的Promise。典型用法如下所示:
$.when( $.ready, $.getScript("optional.js") ).then(function() { // 当 document 准备就绪,并且 optional.js 已经加载或运行 }).catch( function() { // 一个错误发送时触发 });https://github.com/jquery/api.jquery.com/pull/530
弃用:jQuery.unique(), 重命名为 jQuery.uniqueSort()jQuery.unique()方法已重命名为jQuery.uniqueSort(),以使其行为更容易理解。这里没有改变其功能,只有重命名。
弃用:jQuery.parseJSON()由于jQuery 3.0支持的所有浏览器都支持原生的JSON.parse()方法,因此我们不推荐使用jQuery.parseJSON()。
https://github.com/jquery/jquery/issues/2800
弃用:除了 jQuery(function) 以外的 document-ready 处理器由于历史兼容性问题,有多种方式设置 document-ready 处理程序。以下所有方式都是等效的,并在 document-ready 时调用函数fn:
$(fn); $().ready(fn); $(document).ready(fn); $("selector").ready(fn);从jQuery 3.0开始,添加 document-ready 处理程序的推荐方式是第一个方法,$(fn)。如事件部分所述,$(document).on("ready", fn)事件形式具有略微不同的语义并在jQuery 3.0中被删除。
Data 更改:.data()名称包含中划线从jQuery 3.0开始,所有 data 名称都以驼峰拼写方式(例如,clickCount)存储在jQuery内部的数据对象中,而不是中划线形式(例如,click-count)。将中划线名称转换为驼峰拼写法的方式,这与标准DOM在CSS和 data 属性中的JavaScript名称是一致的。
一般来说,当设置或获取指定数据项时,例如 .data("right-aligned"),中划线形式在jQuery 3.0中仍然能够工作,但是如果取回data对象,它将具有驼峰拼写法的形式的 data 项(rightAligned)。3.0中的主要区别是 当你在data对象上使用中划线形式的名称时,不要使用.data()API 来获取或设置他们。
例如:
var $div = $("<div />"); $div.data("clickCount", 2); $div.data("clickCount"); // 2 $div.data("click-count", 3); $div.data("clickCount"); // 3 $div.data("click-count"); // 3 var allData = $div.data(); allData.clickCount; // 3 allData["click-count"]; // undefined allData["click-count"] = 14; $div.data("click-count"); // 3, 不是 14 ,但是在jQuery 2.x中,返回14 allData.clickCount; // 3 allData["click-count"]; // 14
https://github.com/jquery/jquery/issues/2070
https://github.com/jquery/jquery/issues/2257
https://github.com/jquery/jquery/issues/1751
Deferred 更改和功能:jQuery.Deferred 现在兼容 Promises/A+Deferred已更新,兼容了 Promises/A+ 和 ES2015(也称为 ES6)Promise ,这个变化带来重大影响。
https://github.com/jquery/jquery/issues/1722
https://github.com/jquery/jquery/issues/2102
Resolution.resolve,.reject和.notify现在设置undefined的上下文,而不是使用与它们相关联的Deferred对象的promise。要设置显式上下文,使用.resolveWith,.rejectWith和.notifyWith。
https://github.com/jquery/jquery/issues/3060
Callback exit