Альтернативою послідовному виконанню є передача програмного потоку в іншу частину скрипта. Замість виконання наступного по порядку оператора може виконуватися інший.
Щоб скрипт був корисний, ця передача управління повинна здійснюватися логічно організовано. Передача управління в програмі грунтується на рішенні, результатом якого є оператор істинності (повертає логічне значення true або false). Створюється вираз, яке потім перевіряється на наявність результату true. Це виконується за допомогою двох основних різновидів структур програми.
структура єдиного вибору (if);
структура подвійного вибору (if / else);
вбудований трійчастий оператор?:;
структура множинного вибору (switch).
перевірка виразу на початку циклу (while);
перевірка вираження в кінці циклу (do / while);
виконання для кожного властивості об'єкта (for / in);
повторення під керуванням лічильника (for).
Використовуючи вкладені і наступні один за одним керуючі структури вибору і повторення, можна створювати досить складні скрипти.
Третя форма структурованого програмного потоку забезпечується обробкою виключень, яка в даному документі не розглядається.
У наступних прикладах демонструється синтаксис, який використовується для операторів if і if. else. У першому прикладі показується найпростіша форма логічного умови. Оператор або блок операторів, розташованих після if. виконується в тому, і тільки в тому, випадку, якщо елемент в дужках приймає значення true (або може бути перетворено в це значення).
Аналогічно, якщо тільки одне з декількох умов має давати результат true (при використанні оператора ||), перевірка зупиняється, як тільки з'ясовується, що будь-яка умова виконується. Це ефективно в тому випадку, якщо перевіряються умови передбачають виконання викликів функцій або інших складних виразів. З огляду на вищесказане, при створенні виразів "АБО" спочатку розміщуйте умови, для яких вища ймовірність значення true. При створенні виразів "І" спочатку розміщуйте умови, для яких вища ймовірність значення false.
Перевага створення скрипта таким способом можна побачити в наступному прикладі. Тут функція runsecond () не виконуватиметься, якщо runfirst () повертає значення 0.
Оператор for вказує змінну лічильника, умова перевірки і дію, оновлююче лічильник. Умова перевіряється перед кожною итерацией циклу. У разі успішної перевірки виконується код всередині циклу. Якщо перевірка не пройдена успішно, код всередині циклу не виконується, а програма продовжує роботу з першого рядка, наступній безпосередньо після циклу. Після виконання циклу змінна лічильника оновлюється перед початком наступної ітерації.
Якщо умова циклу не виконується, цикл не запускається. Якщо умова циклу виконується завжди, утворюється нескінченний цикл. Цикли першого типу іноді бувають корисні, але нескінченні цикли використовуються вкрай рідко, тому будьте уважні при визначенні умов циклу.