Вышла версия jQuery 3.0 Beta

18.01.2016

jQuery 3.0 — новая версия до сих пор самой популярной JavaScript-библиотеки — получила статус beta. Скачать новую версию можно с CDN:

https://code.jquery.com/jquery-3.0.0-beta1.js

https://code.jquery.com/jquery-3.0.0-beta1.min.js

Или установить через NPM:


npm install jquery@3.0.0-beta1

Какие же изменения появились в новой версии?

Имена data-атрибутов

Изменения коснулись метода получения/записи data-атрибутов .data(). Названия атрибутов теперь можно указывать как в kebab-case, так и в camelCase. Это значит, что значение атрибута «data-foo-bar» c помощью метода .data() теперь можно получить двумя способами:


$element.data(‘foo-bar’);
$element.data(‘fooBar’);

Обратите внимание, что для названий с числами это не работает, т.е. .data('foo42') и .data('foo-42') все же будут отличаться.

Совместимость jQuery.Deferred и Promises/A+

Серьезные изменения произошли с объектом jQuery.Deferred для совместимости с Promises/A+ и ES6 Promises. А именно:

  • Исключение, брошенное в .then теперь возвращается в качестве значения reject. До этого исключения всплывали вверх и прерывали выполнение функции обратного вызова.
  • Результат Deferred объекта теперь контролируется обработчиками .then — исключения, брошенные в обработчиках, становятся значениями reject, остальные значения, не являющиеся thenable-объектами, становятся значениями успешного выполнения. Раньше значение, возвращенное из коллбэка reject, становилось значением неуспешного завершения, а возвращенное из коллбэка resolve — значением успешного завершения обещания.
  • Коллбэки всегда вызываются асинхронно. До этого, они вызывались либо сразу же, если обещание уже выполнено, либо сразу после выполнения.
  • Коллбэки progress теперь не могут влиять на состояние Deferred объектов, с которыми они связаны.

var parent = jQuery.Deferred();
var child = parent.then( null, function() {
    return "bar";
});
var callback = function( state ) {
    return function( value ) {
        console.log( state, value );
        throw new Error( "baz" );
  };
};
var grandchildren = [
    child.then( callback( "fulfilled" ), callback( "rejected" ) ),
    child.then( callback( "fulfilled" ), callback( "rejected" ) )
];
parent.reject( "foo" );
console.log( "parent resolved" );

В примере выше в jQuery 3.0 в консоль выведется сначала строка ‘parent resolved’, поскольку все коллбэки вызываются асинхронно. Затем строка ‘fulfilled bar’, потому что значение, возвращенное из обработчиков resolve или reject, становится значением успешного завершения. В предыдущей версии jQuery мы бы получили ‘rejected bar’, а затем необработанную ошибку Error(‘baz’).

Метод $.when также обновился, теперь он поддерживает любые thenable-объекты.

Также у объекта Deferred добавился метод .catch() как аналог вызова .then(null, fn).

Уведомления об ошибках

Если в предыдущих версиях jQuery пыталась «обработать» ошибки пользователя и вернуть хоть что-то, вместо того, чтобы выбросить исключение, то в jQuery 3.0 разработчики решили отойти от этой практики. Например, если попытаться вызвать метод offset у объекта окна — возникнет ошибка.

Использование requestAnimationFrame в анимации

На платформах, поддерживающих requestAnimationFrame API (а это почти все, кроме IE и Android < 4.4), теперь используется этот API для увеличения производительности анимации. Благодаря чему анимация стала более сглаженной и использует меньше процессорного времени и заряда батареи, в случае с мобильными устройствами. Разработчики jQuery уже пытались использовать requestAnimationFrame несколько лет назад, но тогда столкнулись с серьезными проблемами поддержки и вынуждены были откатить эти изменения.

Это далеко не все изменения, появившиеся в jQuery 3.0 Beta. Полный список изменений можно посмотреть на GitHub.

Рассылка
Подпишитесь на рассылку и получайте дайджест новостей и статей.
Никакого спама!
Подписаться