我注意到我可以用a && b();作为if(a) {b()}或if(a) b();的缩写。这种优柔寡断最常见的情况是对象具有4-5个元素。
问:与if(){}的迭代或遍历for (var i in b) { b[i]() }的常规对象相比,使用速记是否存在性能损益?
建议:一些代码
var b = { x: 20, y: 30 }, // sample object
fn = function(v){ return v+5; }, // sample function
endValue = 0; // some lol
// go through all elements via if
if ('x' in b) { endValue += fn(b['x']); }
if ('y' in b) { endValue += fn(b['y']); }
//go through all elements via shorthand
('x' in b) && (endValue += fn(b['x']));
('y' in b) && (endValue += fn(b['y']));
//go through all elements via object traversing
for (var i in b) {
endValue += fn(b[i]);
}我假设可能有非常微不足道的性能差异,我需要使用上面的速记方法在endValue的计算中有一个非常具体的对象元素的顺序。
发布于 2016-09-01 13:51:04
与
if(){}相比,使用速记是否存在性能损益?
不是的。对于任何合适的编译器,它们的性能都是完全相同的。但是,为了可读性和简洁性,您应该使用if语句。
使用遍历
for (var i in b) { b[i]() }的常规对象if(){}的迭代是否有性能增益/损失?
这是无法真正比较的,因为他们正在做根本不同的事情,并且假设他们有相同的结果,那么性能在很大程度上取决于您传入的实际对象及其属性。用你需要的行为。
发布于 2016-09-01 13:31:03
google的闭包编译器广泛使用速记代码,从基准测试来看,性能得到了很小的提高。https://closure-compiler.appspot.com/home
https://stackoverflow.com/questions/39272769
复制相似问题