0

为什么逻辑表达式n 比if-elseinline-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";
}
  • 所有函数的评估结果都相同。
  • 1所有函数都从and的数组中传递一个值0,请参阅这个jsperf 测试
4

2 回答 2

8

因为它确实需要评估是否"t"真实。短路表达式 return ((val && "t") || "f")可以展开为

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

当然,优化编译器可以静态确定文字的真实性"t",避免重复ToBoolean(val)两次,但显然任何 JS 引擎都没有这样做。

于 2015-05-13T14:48:17.543 回答
0

因为

val && "t" || "f"

必须评估valand,如果val评估为true,"t"以及。

因此,使用onlyfalseonlytrue快得多,但仍然很慢。

于 2015-05-13T14:49:37.873 回答