我注意到我可以使用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
的计算中。
答案 0 :(得分:2)
与
if(){}
相比,使用速记是否有性能增益/损失?
没有。对于任何体面的编译器,它们执行完全相同。但是,您应该使用if
语句以提高可读性和简洁性。
使用if(){}与常规对象遍历
for (var i in b) { b[i]() }
的迭代是否有性能增益/损失?
无法真正比较,因为它们正在做着根本不同的事情,并且假设它们具有相同的结果,性能在很大程度上取决于您传入的实际对象及其属性。使用您需要的行为。
答案 1 :(得分:0)