0

論理式がif-elseinline-if- elseよりも 2 倍遅いのはなぜですか?

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 テストを参照してください。
4

2 に答える 2

8

"t"が真実かどうかを評価する必要があるからです。短絡式 return ((val && "t") || "f")は次のように展開できます。

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

もちろん、最適化コンパイラは"t"リテラルの真実性を静的に判断し、 ToBoolean(val)2 回行うことを避けることができますが、明らかにこれはどの JS エンジンでも行われません。

于 2015-05-13T14:48:17.543 に答える
0

なぜなら

val && "t" || "f"

を評価する必要がvalあり、 が に評価される場合valtrue同様"t"です。

したがって、onlyfalseを使用すると、 onlytrueよりも大幅に高速になりますが、それでもかなり遅くなります。

于 2015-05-13T14:49:37.873 に答える