javascript - 为什么 `exp && "t"|| "f"` 比 inline-if-else 慢很多?

标签 javascript performance jsperf

为什么逻辑表达式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";
}
  • 所有函数的计算结果都相同。
  • 所有函数都从 10 数组传递值,请参阅此 jsperf test .

最佳答案

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

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

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

关于javascript - 为什么 `exp && "t"|| "f"` 比 inline-if-else 慢很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30217942/

相关文章:

javascript - 更改div的html并在函数运行时显示它

javascript - 从选择下拉列表中调用外部 javascript 文件

CSS 性能问题

search - 如何找到我的 jsperf 测试?

javascript - JSPerf 测试结果随着测试运行而变慢?

javascript - "div"JS 的显示/隐藏问题;

javascript - 为什么这些半列出现在这个 for 循环中?

java - byte 与 int 的性能差异有多大?

sql-server - 什么是 Sql Server 中的书签查找?

javascript - jQuery 事件回调速度 : Anonymous vs. 命名函数