web-dev-qa-db-ja.com

Javascriptの&&演算子とネストされたifステートメント:速いのは何ですか?

さて、皆さんが私に飛びついて「パフォーマンスについて心配している」と言う前に、ここではむしろ熱心すぎるというよりも好奇心からこれをお願いしていることをここに立たせてください。とはいえ...

&&( "and")演算子の使用とネストされたifステートメントのパフォーマンスに違いがあるかどうか興味があります。また、実際の処理の違いはありますか?つまり、&& always process bothステートメントを実行しますか、それとも最初のステートメントが失敗した場合に最初のステートメントを停止しますか?ネストされたifステートメントとはどう違うのでしょうか?

明確にする例:

A)&&( "and")演算子

if(a == b && c == d) { ...perform some code fashizzle... }

対B)ネストされたifステートメント

if(a == b) {
    if(c == d) { ...perform some code fashizzle... }
}
34
arxpoetica

パフォーマンスの違いはごくわずかです。左側の式がfalseを評価するとき、&&演算子は右側の式をチェックしません。ただし、&演算子はbothに関係なくチェックしますが、この事実が原因で混乱が生じている可能性があります。

この特定の例では、&&を使用するものを選択します。読みやすいので。

30
BalusC

パフォーマンスが心配な場合は、a==bc==dよりも失敗する可能性が高いことを確認してください。そうすれば、ifステートメントは早期に失敗します。

12
Gert Grenander

性能テストは、物事を明確にするのに役立つかもしれません: http://jsperf.com/simey-if-vs-if

この2つのパフォーマンスの違いは、ごくわずかです。しかし、@ Gertが述べたように、早期に失敗すると本当に改善されます。

3
simey.me

ネストされたifsと同様に、&&は怠け者です。
表現 a && bは、bが真実である場合にのみaを評価します。

したがって、2つのケースは、機能とパフォーマンスの両方で完全に同一である必要があります。

2
SLaks