8

我看到很多:

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

在 JavaScript 中。这比

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

还是为了方便而写的简洁?

4

4 回答 4

6

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

链接在这里

不同的结果!

两者之间有一个根本的区别,三元语句是表达式而不是控制流。如果有人将其编写为三元表达式而不是标准 if / than / else,那么当两者的工作方式相同时,它们(在我看来)会使代码在没有充分理由的情况下更难阅读。

在速度方面应该没有区别。除非您使用的是非常糟糕的 javascript 实现。两个语句中最慢的部分是分支。

于 2012-07-06T20:10:37.623 回答
4

你应该先写可读性,然后再写一百五十秒的微小优化。在许多情况下,第一种形式更容易阅读,并且在性能方面可能没有太大差异。

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

于 2012-07-06T20:13:50.857 回答
3

这是统计数据在此处输入图像描述

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

于 2012-07-06T20:17:42.027 回答
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");  

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

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

于 2017-10-24T18:13:18.863 回答