Подтвердить что ты не робот

JQuery $.each против JavaScript.forEach

Возьмите два способа удаления массива элементов из DOM с помощью jQuery:

var collection = [...]; //  An array of jQuery DOM objects

// Using jQuery iteration
$(collection).each(function(index, element) { element.remove(); });

// Or as pointed out by Barmar
$(collection).remove();

// Using native iteration
collection.forEach(function(element) { element.remove(); });

Есть ли какая-либо реальная разница в оперативном режиме? Я ожидал бы, если интерпретатор/компилятор браузера не будет достаточно умным, что будет лишний лишний накладной ресурс с прежним методом, хотя, вероятно, и незначительный, если массив мал.

4b9b3361

Ответ 1

С практической точки зрения это немного расплывчато, но вот как реализован $.each

https://github.com/jquery/jquery/blob/master/src/core.js#L296

[].forEach(), скорее всего, будет реализовано в собственном коде для каждого браузера.

Без тестирования производительности они очень похожи. Хотя, если вы можете удалить JQuery в целом, это не менее нескольких КБ, браузер не нужно загружать

Ответ 2

Комментарии к исходному вопросу подходят для вашего конкретного сценария, когда вы хотите удалить отдельные элементы.

На более общей ноте, некоторые другие различия:

1) Array.forEach() очевидно требует, чтобы вы перебирали массив. Подход jQuery позволит вам перебирать свойства объекта.

2) jQuery.each() разрешает короткое замыкание. Прочтите этот пост, в котором упоминается использование "some()" и "every()" для выполнения аналогичных действий с чистым js:

Как замкнуть Array.forEach, например, вызвать прерывание?

Ответ 3

По производительности они оба похожи Perf test

forEach реализован встроенным в браузере, что упрощает поддержку для разработчиков, не являющихся jquery, в то время как с другой стороны, каждый обеспечивает лучшую читаемость.

Ответ 4

Array.forEach - это метод, который выполняет итерацию по собственным массивам Javascript.

jQuery collection.each - это метод итерации, реализованный командой jQuery вручную. коллекция jQuery не является массивом.

Это также было более актуальным, когда впервые появился jQuery, а Array.forEach не был реализован в каких-либо браузерах.