Операторы 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... }
}
Ответы
Ответ 1
Разница в производительности незначительна. Оператор &&
не проверяет правильное выражение, когда выражение левой руки оценивает false
. Тем не менее, оператор &
будет проверять оба варианта независимо от того, может быть, ваше замешательство вызвано этим фактом.
В этом конкретном примере я просто выбрал тот, который использует &&
, так как это более читаемое.
Ответ 2
Если вы обеспокоены производительностью, убедитесь, что a==b
с большей вероятностью потерпит неудачу, чем c==d
. Таким образом, утверждение if
не будет выполнено раньше.
Ответ 3
Как вложенный if
s, &&
ленив.
Выражение a && b
будет оценивать только b
, если a
правдиво.
Следовательно, оба случая должны быть полностью идентичными как по функциональности, так и по производительности.
Ответ 4
Тест на торможение может помочь прояснить ситуацию: http://jsperf.com/simey-if-vs-if
Кажется, разница в производительности невероятно небрежна между ними; Однако, как отметил @Gert, неудача на раннем этапе действительно улучшает ситуацию.