三元语句比javascript中的if / then / else语句更快吗?

时间:2012-07-06 20:04:07

标签: javascript performance ternary-operator

我看到了很多:

var something = (is_something_true()) ? 3 : 4;

在javascript中。这比

更快
var something;
if (is_something_true()) {
    something = 3;
} else {
    something = 4;
}

还是为了方便而简明扼要地写了?

4 个答案:

答案 0 :(得分:4)

请享受这一点 - 如果差异在统计上有效,那么结果(真或假)也很重要 - 显然这只是机器上对浏览器性能有影响的其他内容:

Here is the link

different results!

两者之间存在根本区别,三元语句是表达式而不是控制流。如果有人将其写为三元表达式而不是标准if / than / else,当两者都工作相同时,他们(在我看来)会使代码更难以无理由地阅读。

就速度而言,应该没有区别。除非你使用一个非常糟糕的JavaScript实现。两个陈述中最慢的部分是分支。

答案 1 :(得分:4)

你应该首先编写可读性,然后进行微小优化,然后编写一百五十二秒。在许多情况下,第一种形式更容易阅读,并且在某种程度上可能没有太大差异。

(即使你不同意并认为第二种形式更容易阅读,询问相对性能差异仍然是错误的问题。)

答案 2 :(得分:2)

以下是statisiticsenter image description here

经过多次测试和观察,可以得出结论,大多数情况下三元运算符(?:)比if/else慢。

答案 3 :(得分:1)

是的,两者之间的差异可以忽略不计。

然而,差异是如此之小,以至于你使用哪一个(我更喜欢if / else)并不重要,因为它们有助于提高可读性,如果有人通过你的代码或者你自己,你会节省很多时间也许在说了3个月左右之后。

对于那些想要检查差异的人,请尝试以下代码:

// declarations  
var num1 = 10, num2, i = 0, startTime, endTime, x, y;

// start timer
startTime = Math.floor((new Date()).getTime());

for(; i < 1e8; i++) {
  // first part if /else
  if(x == 10)
    y = x;
  else
    y = 0;

  // second part ternary
  y = (x == 10) ? x : 0;
}

// end timer     
endTime = Math.floor((new Date()).getTime() - startTime);
document.write("Time taken " + endTime + " ms");  

注意:注释其中一个部分并执行代码并运行循环以进行大量迭代(代码数百万次迭代)。

提示:尝试多次运行循环以获得平均值。

相关问题