Подтвердить что ты не робот

Операторы Javascript && от вложенных операторов if: что быстрее?

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

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

Примеры должны быть ясными:

A) && ( "и" )

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

против B) вложенные операторы if

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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