为什么`exp&& " T" || " f"`比inline-if-else慢得多?

时间:2015-05-13 14:32:15

标签: javascript performance jsperf

为什么逻辑expressio n比 if-else inline-if-else 慢两倍?

function logicalExp(val) {
  return val && "t" || "f";
}

function inlineIfElse(val) {
  return val ? "t" : "f";
}    

function ifElse(val) {
  if (val) return "t";
  else return "f";
}
  • 所有功能评估的结果相同。
  • 所有函数都是从10数组中传递的值,请参阅此jsperf test

2 个答案:

答案 0 :(得分:8)

因为它确实需要评估"t"是否真实。 short-circuit expression return ((val && "t") || "f")可以扩展为

var and = val ? "t" : val;
var or = and ? and : "f";
return or;

当然,优化编译器可以静态地确定"t"文字的真实性,并避免两次ToBoolean(val),但显然这不是在任何JS引擎中完成的。

答案 1 :(得分:0)

由于

val && "t" || "f"

必须评估val,如果val评估为true"t"也是如此。

因此,使用only false的速度明显快于only true,但仍然非常慢。