为什么是 'exp && "t" || "f"比内联慢得多?



为什么逻辑expressio n比慢> if-else inline-ifline-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测试。

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

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

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

因为

val && "t" || "f"

必须评估val,如果valtrue进行评估,也必须评估"t"

因此,仅使用false比仅true的速度要快得多,但仍然很慢。

相关内容

  • 没有找到相关文章

最新更新