Оператор Javascript && и вложенные операторы if: что быстрее? - PullRequest
34 голосов
/ 27 июня 2010

Теперь, прежде чем вы все прыгнете на меня и скажете: «Вы слишком обеспокоены производительностью», позвольте сказать, что я прошу этого больше из любопытства, чем излишне усердной натуры.Тем не менее ...

Мне интересно, есть ли разница в производительности между использованием оператора && ("and") и вложенных операторов if.Кроме того, есть ли реальная разница в обработке?То есть, && всегда обрабатывает оба оператора или остановит первый в случае сбоя первого?Как это будет отличаться от вложенных, если операторы?

Примеры, которые будут понятны:

A) && ("and") оператор

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

против B) вложен, еслизаявления

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

Ответы [ 4 ]

30 голосов
/ 27 июня 2010

Разница в производительности незначительна. Оператор && не будет проверять выражение правой руки, когда выражение левой руки оценивает false. Тем не менее, оператор & проверит оба независимо от того, может быть, ваша путаница вызвана этим фактом.

В этом конкретном примере я бы просто выбрал тот, который использует &&, так как он лучше читается.

12 голосов
/ 27 июня 2010

Если вас беспокоит производительность, убедитесь, что a==b с большей вероятностью потерпит неудачу, чем c==d. Таким образом, оператор if рано потерпит неудачу.

3 голосов
/ 11 мая 2015

Тест производительности может помочь прояснить ситуацию: http://jsperf.com/simey-if-vs-if

Кажется, что разница в производительности между ними невероятно незначительна;Однако, как упомянул @Gert, ранний провал действительно улучшает ситуацию.

2 голосов
/ 27 июня 2010

Как и вложенные if с, && ленивый.
Выражение a && b будет оценивать b только если a является правдивым.

Следовательно, оба случая должны быть полностью идентичны как по функциональности, так и по производительности.

...