为什么逻辑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";
}
- 所有功能都以相同的结果进行评估。
- 所有功能都从
1
和0
数组中传递给了一个值,请参阅此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
,如果val
对true
进行评估,也必须评估"t"
。
因此,仅使用false
比仅true
的速度要快得多,但仍然很慢。