jQuery $ .each与JavaScript .forEach

Lee*_*Lee 12 javascript jquery dom

使用以下两种方法使用jQuery从DOM中删除元素数组:

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(); });
Run Code Online (Sandbox Code Playgroud)

在操作上有什么真正的区别吗?我希望,除非浏览器解释器/编译器足够聪明,否则前一种方法会产生额外的不必要开销,尽管如果数组很小,可能会很小.

dpi*_*pix 5

操作上有点模糊,但是这是$ .each实现的方式

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

[].forEach() 将很可能以每种浏览器的本机代码实现。

如果不进行性能测试,它们将非常相似。虽然如果您可以完全删除至少几kb的jquery,则无需加载浏览器


小智 5

对原始问题的评论适用于您想要删除单个项目的特定场景。

更一般地说,还有一些其他差异:

1) Array.forEach() 显然要求您遍历数组。jQuery的方法会让你在整个迭代特性的的对象。

2) jQuery.each() 允许短路。查看这篇文章,其中提到使用“some()”和“every()”用纯js做类似的事情:

如何像调用break一样短路Array.forEach?