Javascript性能:`if(a in b){b [a]()}`vs`a in b&& b [a]();`vs对象遍历

时间:2016-09-01 13:24:37

标签: javascript if-statement

我注意到我可以使用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的计算中。

2 个答案:

答案 0 :(得分:2)

  

if(){}相比,使用速记是否有性能增益/损失?

没有。对于任何体面的编译器,它们执行完全相同。但是,您应该使用if语句以提高可读性和简洁性。

  

使用if(){}与常规对象遍历for (var i in b) { b[i]() }的迭代是否有性能增益/损失?

无法真正比​​较,因为它们正在做着根本不同的事情,并且假设它们具有相同的结果,性能在很大程度上取决于您传入的实际对象及其属性。使用您需要的行为。

答案 1 :(得分:0)

谷歌的闭包编译器广泛使用速记代码,并且从基准测试中可以获得很小的性能提升。 https://closure-compiler.appspot.com/home