我在应用程序中使用native for循环(下面的第3个循环语句),在某些我阅读native for循环的地方,它的性能比angular.forEach好,但是我没有找到正确的解释。如果有人有更好的解释,请分享。
1)angular.forEach
和2)
for (var i = Things.length - 1; i >= 0; i--){
Things[i]
};
和3)
for (var i=0; i < Things.length; i++) {
Things[i]
};
谢谢
用于每个及相关
如果您使用的是支持ES5阵列功能的环境(直接或使用填充程序),则可以使用新的forEach(规格| MDN):
var a = ["a", "b", "c"];
a.forEach(function(entry) {
console.log(entry);
});
forEach接受一个迭代器函数,以及(可选)一个在调用该迭代器函数时用作该值的值(上面未使用)。依次对数组中的每个条目调用迭代器函数,从而跳过稀疏数组中不存在的条目。尽管上面我只使用了一个参数,但是迭代器函数被三个调用:每个条目的值,该条目的索引以及对您要迭代的数组的引用(以防您的函数尚不具备此参数)便利)。
仍要在通用网页上使用forEach(截至2014年3月)要求您为不支持本机的浏览器添加一个“ shim”,因为IE8和更早版本不支持它(并且全球浏览器用户的使用率介于7%到21%之间,具体取决于您所相信的人;该数字由于中国(与其他国家/地区)相比明显更高的使用率而有所偏差,请始终查看您自己的统计信息以了解您需要支持的内容)。但是填充/填充很容易完成(搜索“ es5 shim”以获得多种选择)。
forEach的好处是您不必在包含范围中声明索引和值变量,因为它们是作为迭代函数的参数提供的,因此很好地范围仅限于该迭代。
如果您担心为每个数组条目进行函数调用的运行时成本,请不必担心;细节。
另外,forEach是“遍历所有对象”功能,但是ES5定义了其他几个有用的“遍历数组并执行操作”功能,包括:
每个(停止迭代器第一次返回false或某些错误的循环),每个过滤器(停止迭代器第一次返回true或真实的循环)创建一个新数组,该数组包含filter函数返回true的元素,并忽略其中的函数返回false)map(根据迭代器函数返回的值创建一个新数组)reduce(通过重复调用迭代器并传入先前的值来建立一个值;有关详细信息,请参见规范;对汇总数组的内容很有用)和许多其他事情)reduceRight(例如reduce,但是以降序而不是升序工作)
使用简单的for循环
有时,旧方法是最好的:
var index;
var a = ["a", "b", "c"];
for (index = 0; index < a.length; ++index) {
console.log(a[index]);
}
如果数组的长度在循环期间不会改变,并且是对性能敏感的代码(不太可能),那么稍微复杂一些的数组抢占长度可能会快一点:
var index, len;
var a = ["a", "b", "c"];
for (index = 0, len = a.length; index < len; ++index) {
console.log(a[index]);
}
和/或倒数:
var index;
var a = ["a", "b", "c"];
for (index = a.length - 1; index >= 0; --index) {
console.log(a[index]);
}
但是,使用现代JavaScript引擎,很少需要消耗最后的精力。
.forEach无法有效地被破坏。您必须抛出异常才能执行中断
因此本机循环比.each循环更好
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句