Примусовий вихід із циклу в JavaScript. Цикли for JavaScript

Цикл - це інструкція, що управляє, що дозволяє повторювати виконання програмного коду певну кількість разів. Кожне окреме виконання інструкцій у тілі циклу називається ітерацією.

Цикл while

Синтаксис циклу while:

Вираз у круглих дужках називається умовою виконанняциклу або коротко умовою. Спочатку обчислюється значення виразу. Отримане значення, якщо необхідно, неявно перетворюється на булеву типу. Якщо результатом обчислення виразу є значення true , то інструкція, розташована в тілі циклу, виконується, потім керування передається на початок циклу і обчислюється умова знову. Якщо результатом обчислення виразу є false , інтерпретатор завершує роботу циклу і переходить до виконання інструкції наступної за циклом. Таким чином, інтерпретатор знову і знову виконує код розташований у тілі циклу, доки умова залишається істинною:

Var i = 0; while (i< 3) { // Выполнять код, пока значение переменной i меньше 3 alert("i: " + i); i++; // Увеличиваем значение переменной i }

Цикл do-while

Синтаксис циклу do-while:

Цикл do-while схожий на цикл while , крім того, що перевірка умови виконання циклу проводиться після першої ітерації, а не перед нею, і завершується цикл крапкою з комою. Оскільки умова перевіряється після ітерації, код у тілі циклу do-while завжди виконується щонайменше один раз:

Var count = 0; do ( document.write(count + " "); count++; ) while(count< 5); Попробовать »

Цей цикл може бути корисним, коли код у тілі циклу повинен бути виконаний хоча б один раз, незалежно від умови виконання.

Цикл for

Синтаксис циклу for:

У циклі for розташовуються три вирази, що розділяються крапкою з комою. Ці три вирази мають такий порядок виконання:

  1. Перший вираз завжди обчислюється лише один раз – перед першою ітерацією. Тому зазвичай як перший вираз виступає визначення змінної, яка використовується в умові виконання циклу як лічильник.
  2. Другий вираз визначає умову виконання циклу. Воно обчислюється перед кожною ітерацією та визначає, чи виконуватиметься тіло циклу. Якщо результатом обчислення виразу є справжнє значення, програмний код у тілі циклу виконується. Якщо повертається помилкове значення, виконання циклу завершується і керування переходить до наступної після циклу інструкції. Якщо при першій перевірці умови воно виявляється помилковим, код у тілі циклу не виконається жодного разу.
  3. Після кожної ітерації обчислюється третій вираз. Зазвичай його використовують для зміни значення змінної, яка використовується для перевірки умови виконання циклу.

Приклад циклу for:

For (var count = 0; count< 5; count++) document.write(count + " "); Попробовать »

Як видно з прикладу, цикл for на відміну від інших циклів дозволяє згрупувати пов'язаний із циклом код в одному місці.

Будь-який з виразів у циклі for може бути відсутнім, однак самі крапки з комою обов'язково повинні бути присутніми, інакше буде синтаксична помилка. За відсутності другого виразу цикл виконуватиметься нескінченно.

Var i = 0; for (; i< 4; i++) ... var i = 0; for (; i < 4;) ... for (var i = 1; /* нет условия */ ; i++) ... // Это эквивалентно следующему коду for (var i = 1; true; i++) ...

Замість одного виразу можна вказати кілька виразів, розділяючи їх оператором кома.

// не виконається, оскільки у перевірці умови останній вираз false for (i = 1; i< 4, false; i++) ... for (var i = 1, j = 5; i <= 5; i++, j--) document.write(i + " " + j +"
"); Спробувати »

Цикл for-in

Цикл for-in використовується для перебору у випадковому порядку властивостей об'єкта, що перераховуються, і має наступний синтаксис:

For (змінна in об'єкт) інструкція;

Зліва від ключового слова in вказується ім'я змінної, якій перед початком кожної ітерації циклу надається у вигляді рядка ім'я однієї з властивостей об'єкта. Праворуч від ключового слова in вказується об'єкт, властивості якого перебиратимуться циклом. Цикл буде виконуватися доти, доки не будуть перебрані всі доступні властивості. Якщо змінна, що представляє об'єкт, матиме значення null або undefined цикл не виконається жодного разу:

Var obj = (x: 5, y: 10); for (var prop in obj) (alert(prop);)

Щоб пов'язаний із циклом код був в одному місці, у циклі for-in допускається оголошувати змінну. Тому, як вираз перед ключовим словом in зазвичай виступає оголошення змінної, якій присвоюватимуться імена властивостей.

Цикли JavaScriptзабезпечують багаторазове виконання обчислень, що повторюються. Вони оптимізують процес написання коду, виконуючи одну і ту ж інструкцію або блок інструкцій, що утворюють тіло циклу, задане число разів (використовуючи змінну-лічильник) або поки що задана умова істинна. Цикли виконують обхід послідовності значень. Одноразове виконання циклу називається ітерацією.

На продуктивність циклу впливають кількість ітерацій та кількість операцій, що виконуються в тілі циклу кожної ітерації.

У JavaScript існують такі оператори циклу:

1) for використовується коли ви заздалегідь знаєте, скільки разів вам потрібно щось зробити;
2) for...in використовується для обходу властивостей об'єктів;
3) while використовується коли ви не знаєте, скільки разів потрібно щось зробити;
4) do...while працює аналогічно з оператором while. Відрізняється тим, що do...while завжди виконує вираз у фігурних дужках принаймні один раз, навіть якщо перевірка умови повертає false .

Типи циклів JavaScript, управління циклом

1. Цикл for

Цикл for використовується для виконання ітерацій щодо елементів масивів або об'єктів, що нагадують масиви, таких як arguments і HTMLCollection . Умову перевіряють перед кожною ітерацією циклу. У разі успішної перевірки виконується код усередині циклу, інакше код усередині циклу не виконується і програма продовжує роботу з першого рядка, наступного безпосередньо після циклу.

Наступний цикл виведе на консоль рядок Hello, JavaScript! п'ять раз.

For (var i = 0; i< 5; i++) { console.log(i + ": Hello, JavaScript!"); } Мал. 1. Результат виконання циклу for на консолі

1.1. Як працює цикл for

Цикл for складається з трьох різних операцій:

Крок 1. ініціалізація var i = 0; — оголошення змінної-лічильника, яка перевірятиметься під час виконання циклу. Ця змінна ініціалізується із значенням 0 . Найчастіше як лічильники циклу виступають змінні з іменами i, j і k.

Крок 2 перевірка умови i< 5; — условное выражение, если оно возвращает true , тело цикла (инструкция в фигурных скобках) будет выполнено. В данном примере проверка условия идёт до тех пор, пока значение счётчика меньше 5 .

Крок 3 завершальна операція i++ - операція збільшення лічильника, що збільшує значення змінної var i на одиницю. Замість операції інкременту також може використовуватися операція декременту.

Після завершення циклу змінної var i зберігається значення 1 . Наступний виток циклу виконується для for (var i = 1; i< 5; i++) { } . Условное выражение вычисляется снова, чтобы проверить, является ли значение счётчика i всё ещё меньше 5 . Если это так, операторы в теле цикла выполняются ещё раз. Завершающая операция снова увеличивает значение переменной на единицу. Шаги 2 и 3 повторяются до тех пор, пока условие i < 5; возвращает true .

1.2. Виведення значень масиву

Щоб вивести значення масиву за допомогою циклу for, потрібно задіяти властивість масиву length. Це допоможе визначити кількість елементів у масиві та виконати цикл таку ж кількість разів.

Наведений нижче скрипт виведе на екран п'ять повідомлень із назвами кольорів:

Var flowers = ["Rose", "Lily", "Tulip", "Jasmine", "Orchid"]; for (var i = 0; i< flowers.length; i++){ alert(flowers[i] + " - это цветок."); }

Якщо значення властивості length не змінюється в ході виконання циклу, можна зберегти його в локальній змінній, а потім використовувати цю змінну в умовному виразі. Таким чином можна підвищити швидкість виконання циклу, оскільки значення властивості length буде вилучатися лише один раз за весь час роботи циклу.

Var flowers = ["Rose", "Lily", "Tulip", "Jasmine", "Orchid"], len = flowers.length; for (var i = 0; i

2. Цикл for...in

Цикли for...in використовуються для обходу властивостей об'єктів, що не є масивами. Такий обхід також називається перерахуванням. При обході рекомендується використовувати метод hasOwnProperty() , щоб відфільтрувати властивості, успадковані від прототипу.

Наприклад створимо об'єкт з допомогою літералу об'єкта.

Var user = ( name: "Alice", age: 25, country: "Russia"); for (var prop in user) ( console.log(prop + ": " + user); )
Мал. 2. Результат виконання циклу for...in на консолі

Припустимо, що сценарії до або після створення об'єкта user прототип об'єкта Object був розширений додатковим методом clone() .

If (typeof Object.prototype.clone === "undefined") ( Object.prototype.clone = function () (); )

Оскільки ланцюжок успадкування прототипу постійно перевіряється інтерпретатором, всі об'єкти автоматично отримують доступом до нового методу.


Мал. 3. Результат повторного виконання циклу for...in на консолі

Щоб уникнути виявлення цього в процесі перерахування властивостей об'єкта user , використовується метод hasOwnProperty() , який відфільтрує властивості прототипу.

Var user = ( name: "Alice", age: 25, country: "Russia"); if (typeof Object.prototype.clone === "undefined") ( Object.prototype.clone = function () (); ) for (var prop in user) ( if (user.hasOwnProperty(prop)) ( console.log (prop + ": " + user); ) )
Мал. 4. Результат перерахування властивостей об'єкта за допомогою методу hasOwnProperty()

3. Цикл while

Цикл while – цикл із попередньою перевіркою умовного вираження. Інструкція всередині циклу (блок коду у фігурних дужках) виконуватиметься у разі, якщо умовний вираз обчислюється в true . Якщо перша перевірка дасть результат false, блок інструкцій не виконається жодного разу.

Після завершення ітерації циклу умовний вираз знову перевіряється на істинність і процес повторюватиметься до тих пір, поки вираз не буде обчислено як false. У цьому випадку програма продовжить роботу з першого рядка, наступного безпосередньо після циклу (якщо є).

Цей цикл виведе на екран таблицю множення для числа 3:

Var i = 1; var msg = ""; while (i< 10) { msg+= i + " x 3 = " + (i * 3) + "
"; i++; ) document.write(msg);
Мал. 5. Результат виконання циклу while

4. Цикл do...while

Цикл do...while; перевіряє умову продовження після виконання циклу. На відміну від циклу while, do...while; тіло циклу виконується як мінімум один раз, оскільки умова перевіряється наприкінці циклу, а чи не на початку. Цей цикл використовується рідше, ніж while , оскільки практично ситуація, коли потрібно хоча б одноразове виконання циклу, зустрічається рідко.

Var result = ""; var i = 0; do ( i += 1; result += i + " "; ) while (i< 5); document.write(result);
Мал. 6. Результат виконання циклу do...while

У наступному прикладі оператори всередині циклу виконуються один раз, навіть якщо умова не виконується.

Var i = 10; do ( document.write(i + " "); i++; ) while (i< 10);

5. Нескінченні цикли

Під час створення будь-якого циклу можна створити нескінченний цикл, який ніколи не завершиться. Такий цикл може потенційно продовжувати працювати доти, доки працює комп'ютер користувача. Більшість сучасних браузерів можуть виявити це та запропонують користувачу зупинити виконання скрипту. Щоб уникнути створення нескінченного циклу, ви повинні бути впевнені, що задана умова в якийсь момент поверне false. Наприклад, наступний цикл задає умову, яка ніколи не повертає брехню, тому що змінна i ніколи не буде меншою за 10:

For (var i = 25; i > 10; i++) ( document.write("Ця пропозиція буде виводитися нескінченно...
"); }

6. Вкладені цикли

Цикл всередині іншого циклу називається вкладеним. За кожної ітерації циклу вкладений цикл виконується повністю. Вкладені цикли можна створювати за допомогою циклу for та циклу while.

For (var count = 1; count< 3; count++) { document.write(count + ". Строка цикла
"); for (var nestcount = 1; nestcount< 3; nestcount++) { document.write("Строка вложенного цикла
"); } }
Мал. 7. Результат виконання вкладеного циклу for

7. Управління циклом

Цикл можна керувати за допомогою операторів break; та continue; .

7.1. Оператор break;

Оператор break; завершує виконання поточного циклу. Він використовується у виняткових випадках, коли цикл не може виконуватися з якоїсь причини, наприклад, якщо програма виявляє помилку. Найчастіше оператор break; є частиною конструкції if.

Коли оператор break; використовується без мітки, він дозволяє вийти з циклу або з інструкції switch. У наступному прикладі створюється лічильник, значення якого повинні змінюватися від 1 до 99, проте оператор break перериває цикл після 14 ітерацій.

For (var i = 1; i< 100; i++) { if (i == 15) { break; } document.write(i); document.write("
"); }
Мал. 8. Результат роботи оператора break у циклі for

Для вкладених циклів оператор break; використовується з міткою, за допомогою якої завершується робота іменованої інструкції. Мітка дозволяє вийти з будь-якого блоку коду. Іменованою інструкцією може бути будь-яка інструкція, зовнішня стосовно оператора break; . Як мітка може бути ім'я інструкції if або ім'я блоку інструкцій, укладених у фігурні дужки тільки для присвоєння мітки цього блоку. між ключовим словом break; та ім'ям мітки не допускається переклад рядка.

Outerloop: for(var i = 0; i< 10; i++) { innerloop: for(var j = 0; j < 10; j++) { if (j >3) break; // Вихід із самого внутрішнього циклу if (i == 2) break innerloop; // Те саме if (i == 4) break outerloop; // Вихід із зовнішнього циклу document.write("i = " + i + " j = " + j + "
"); ) ) document.write("FINAL i = " + i + " j = " + j + "
");

7.2. Оператор continue;

Оператор continue; зупиняє поточну ітерацію циклу та запускає нову ітерацію. При цьому цикл while повертається безпосередньо до своєї умови, а цикл for спочатку обчислює вираз інкремента, а потім повертається до умови.

У цьому прикладі на екран будуть виведені всі парні числа:

Var i; for(i = 1; i<= 10; i++) { if (i % 2 !== 0) { continue; } document.write("
парне число= " + i); )
Мал. 9. Результат роботи оператора continue у циклі for

Оператор continue; також може застосовуватися у вкладених циклах із міткою.

Outerloop: for (var i = 0; i "); for (var j = 0; j "); ) ) document.write("Всі цикли виконані"+"
");
Мал. 10. Результат роботи оператора continue з міткою

Історія освіти сучасного синтаксису мови програмування схожа на пізнання процесів освіти Всесвіту. Що і як було спочатку... Але тепер усе й доступно.

Алгоритм зрештою - завжди послідовний ланцюжок команд. Паралельність у програмуванні – сукупність якось скомбінованих послідовностей. ніколи не був практичнішим за послідовний або паралельний ланцюжок команд. Мітки, переходи та умови – всього було достатньо для будь-якого рішення. Функціональні мови позбавили значення ці ідеї, але необхідність повторення ділянок коду залишилася.

Браузер: DOM, його мова + сервер

На JavaScript цикли залишилися, хоча функціональні ідеї набули особливого сенсу. Можливо щось залишилося від "Лиспа" та "Прологу", але, швидше за все, область, де мешкає JavaScript, призвела до того, що є, але сумнівно що це останнє рішення.

JavaScript працює в браузері, який отримує сторінку, розбирає її в DOM і запускає перший скрипт. Всі інші сторінки, у тому числі завантажені на цій - справа рук розробника, що маніпулює мовою, за допомогою якого може бути викликаний код на сервері та отриманий результат за допомогою механізму AJAX.

Браузер виконує JavaScript-код, який може користуватися об'єктами браузера, включаючи той, що забезпечує передачу інформації на сервер та отримання відповіді, якою може виступати як HTML-розмітка, так і стилі та власне код. Відповідь може бути представлена ​​масивами та об'єктами. Сенс використовувати на JavaScript цикли втрачається, можливостей обійтися без них достатньо, а ризикувати повісити браузер нескінченною послідовністю команд не найкраще рішення.

Власне цикли є у більшості синтаксичних конструкцій JavaScript, розробник може доповнити стандартні конструкції власними функціями.

Положення JavaScript у просторі коду

Сучасний програміст навіть не замислюється, що використовуваний ним while, do while, ...) - зрештою серія тактів (циклів) процесора, проста послідовність двійкових операцій, що переривається перевірками лічильників, тобто умовами.

Як такого циклу немає лише на рівні машинного мови: є комбінація традиційних команд, умовних операцій та переходів. Рівнем вище, який засіб не було використано для розробки браузера та інтерпретатора JavaScript, цикли будуть однозначно. Причому «шматки коду» будуть представлені різними часом та різними поколіннями програмістів. Поверхом вище знаходиться будівля JavaScript. Синтаксис пропонує сучасні JavaScript цикли.

JS - прекрасна мова: практична, сучасна та повнофункціональна. Синтаксис цього інструменту включає всі конструкції, які пройшли перевірку часом і стали непорушним фундаментом будь-якого алгоритму. Але чи так необхідні цикли насправді? Прогрес у програмуванні часто ставив собі питання фундаментального характеру, але у деяких випадках знаходив рішення.

Об'єктивні підстави

Цикл може бути всього двох варіантів: за умовою або лічильником, але по суті (на найнижчому рівні) будь-який цикл - тільки за умовою. У деяких мовах зустрічається цикл "по кожному". На JavaScript цикли foreach представлені конструкцією prop in object, але можна використовувати варіант array.forEach(...).

У будь-якому випадку варіантів два: який виконує в кінцевому підсумку всі алгоритми програміста, що навіть пише інтерпретуючими мовами, не має жодних інших варіантів повтору ланцюжка команд: він може щось виконувати ще раз, поки:

  • лічильник рахує;
  • доки умова виконується.

JavaScript – типовий інтерпретатор. Його особливість: він функціонує всередині браузера, використовує його об'єкти і дозволяє виконувати алгоритми на стороні клієнта, як завантаження сторінки в браузер, так і в процесі її роботи.

Простий цикл по-кожному

На JavaScript цикли foreach виглядають як застосування до масиву функції:

Застосування таких циклів не викликає труднощів. Формально тут немає такого циклу. Існує послідовне звернення функції до елементів масиву.

Цикл за лічильником

Звичніше виглядають на JavaScript цикли for:

Тут лічильником виступає змінна, значення якої змінюється за формулою та ознакою кінця циклу є умова. Не обов'язково, щоб формула і умова включали змінну циклу. Але контроль за моментом закінчення циклу повністю визначається їх змістом.

Умовні цикли

Варіант із while JavaScript пропонує залежно від того, коли потрібно перевіряти умову. Якщо тіло циклу може бути не виконане жодного разу – це одне, якщо тіло має бути виконане хоча б один раз, це інше:

У першому випадку, інтерпретуючи конструкцію while, JavaScript спочатку перевіряє умову, і якщо вона є істинною, то виконує цикл. У другому випадку спочатку буде виконано цикл. Якщо внаслідок зміни змінних, зазначених в умові конструкції do while, воно прийме помилкове значення, виконання циклу припиниться.

Масивні комбінації простих алгоритмів

Основне завдання (складова частина) будь-якого алгоритму - знайти, тільки потім ухвалити рішення щодо того, що робити далі. Найпримітивніший варіант пошуку – звернення до змінної, результат виходить безпосередньо. Якщо змінних багато, чи вона має багато значень (масив), то вибірки значення необхідно знайти те, що визначить подальше поведінка скрипта.

Така проста доктрина зробила цикл із лічильником у мові JavaScript своєрідною панацеєю від усіх завдань. Сучасні комп'ютери відрізняються швидкістю. Часу для виконання скриптів у браузері достатньо, поспішати нікуди. Простіше просто перебрати щось заради чогось. В результаті на J avaScript цикли для набули великої популярності.

Поганого в цьому ніби нічого немає. Але за таким підходом легко втрачається сутність, заради якої пишеться той чи інший алгоритм. Дані не бувають безпредметними. Все, заради чого пишеться будь-яка програма, має сенс.Надмірно вживаючи на J avaScript цикли for, розробник може розглянути необхідну сутність і створити адекватний алгоритм.

Функціональність, інше відображення реальності

Застосовуючи JavaScript-цикли, прикладиоднотипного коду можна уявити функціями - алгоритм відразу перетвориться, основне тіло скрипта зменшиться у розмірі, все стане читаним та зрозумілим.

Це не кардинально нове рішення, але по суті це не виходить за рамки інших конструкцій мови. Зокрема, J avaScript цикли можна виявити в класичній функції split():

var cResult = "9,8,7,6,5,4";
var aResult = cResult .split (",");

Тут немає жодного циклу, але як інакше виконується ця не шляхом пошуку символу "," та використання його для відокремлення одного числа від іншого.

Абстрагуючись від того, як це реалізується всередині функції split(), можна доповнити JavaScript своїм функціоналом, який використовує цикли, з точки зору використання більш зручним. Істотно, що такий підхід призводить до розробки функціоналу для кожного завдання відповідно, але загальне все ж таки буде при такому підході.

Ці функції allt(), padc(), padl() і padr() - те, чого немає в JavaScript, але іноді потрібно прибрати з рядка пробіли або вирівняти довжину рядка зліва, справа або з обох боків. У тілі цих функцій – JavaScript-цикли. Просто, доступно і ніколи не зависне алгоритм, який використовує це.

Варіанти функцій перетворення чисел з 16-річної в 10-ну систему обчислення і, простіше сказати, з одного формату даних в інший, виконані тут за допомогою циклів do while. Дуже компактний та ефективний синтаксис мови.

Правильні цикли – відображення реальності

JavaScript - не подружжя іншим мовам програмування і не відрізняється різноманіттям версій, а головне, прагне не змінювати синтаксис, а розвивати і розширювати його.

Мислення програміста, що використовує JS, відрізняєтьсявід мислення програміста PHP (зокрема, та інших мов у сукупності, ну хіба що "Пролог" та його послідовники не входять до загального русла), коли алгоритм не обмежується змінними, масивами, операторами надання, циклічними конструкціями.

Якщо уявити, що циклів немає, а завдання вирішити треба, то найпростіший варіант (пов'язка на очі) – припустити, що програма обробляє дані, які є точкою чи системою точок в інформаційному просторі. Що таке точка і що така система точок – справа конкретної предметної галузі. Для програміста ця теза позначає: є просте це і є сукупність простих даних. Звичайно, просте це одного рівня для рівня нижче буде системою, а для рівня вище - точкою.

За такого підходу турбота точки - виявляти свою сутність через свої методи. Коли точка в надсистемі, то функція системи - виявляти свою сутність як сукупності сутностей точок, що входять до неї.

Такий підхід старий, як ідея мов програмування, але досі не знайшов свого адекватного відображення у програмуванні. Багато програмістів мислять правильно, але результат їхньої творчості залишає бажати кращого.

Корисно іноді надягати пов'язку на очі, щоб побачити світ!

Цикли

Щоб зрозуміти дію умовних операторів, ми пропонували уявити їх у вигляді розгалужень на дорозі, якою рухається інтерпретатор JavaScript. Цикли можна уявити як розворот на дорозі, що повертає назад, який змушує інтерпретатор багаторазово проходити через ту саму ділянку програмного коду.

У мові JavaScript є чотири цикли: while, do/while, for та for/in. Кожному з них присвячено один із наступних підрозділів. Одне із звичайних застосувань циклів – обхід елементів масиву.

Цикл while

Оператор if є базовим умовним оператором у мові JavaScript, а базовим циклом JavaScript можна вважати цикл while. Він має наступний синтаксис:

while (вираз) (інструкція)

Цикл while починає роботу з обчислення виразу. Якщо цей вираз має хибне значення, інтерпретатор пропускає інструкцію, яка становить тіло циклу, і переходить до наступної інструкції у програмі. Якщо вираз має справжнє значення, виконується інструкція, що утворює тіло циклу, потім управління передається на початок циклу і вираз обчислюється знову. Іншими словами, інтерпретатор знову і знову виконує інструкцію тіла циклу, доки значення виразу залишається істинним. Зверніть увагу, що є можливість організувати нескінченний цикл за допомогою синтаксису while (true).

Зазвичай не потрібно, щоб інтерпретатор JavaScript знову і знову виконував ту саму операцію. Майже у кожному циклі з кожною ітерацією циклу одна чи кілька змінних змінюють свої значення. Оскільки змінна змінюється, дії, які виконує інструкція при кожному проході тіла циклу можуть відрізнятися.

Крім того, якщо змінна змінна (або змінні) є у виразі, значення виразу може змінюватися при кожному проході циклу. Це важливо, т.к. в іншому випадку вираз, значення якого було істинним, ніколи не зміниться і цикл ніколи не завершиться! Нижче наводиться приклад циклу while, який виводить числа від 0 до 9:

Var count = 0; while (count

Як бачите, на початку змінної count надається значення 0, а потім її значення збільшується щоразу, коли виконується тіло циклу. Після того, як цикл буде виконано 10 разів, вираз поверне false (тобто змінна count вже не менше 10), інструкція while завершиться і інтерпретатор перейде до наступної інструкції у програмі. Більшість циклів мають змінні-лічильники, аналогічні count. Найчастіше як лічильники циклу виступають змінні з іменами i, j і k, хоча для того, щоб зробити програмний код зрозумілішим, слід давати лічильникам наочніші імена.

Цикл do/while

Цикл do/while багато в чому схожий цикл while, крім те, що вираз циклу перевіряється наприкінці, а чи не на початку. Це означає, що тіло циклу завжди виконується щонайменше один раз. Ця інструкція має наступний синтаксис:

do (інструкція) while (вираз);

Цикл do/while використовується рідше, ніж родинний цикл while. Справа в тому, що на практиці ситуація, коли ви заздалегідь впевнені, що потрібно хоча б один раз виконати тіло циклу, дещо незвичайна. Нижче наведено приклад використання циклу do/while:

Function printArray(a) ( var len = a.length, i = 0; if (len == 0) console.log("Порожній масив"); else ( do ( console.log(a[i]); ) while (++i

Між циклом do/while та звичайним циклом while є дві відмінності. По-перше, цикл do вимагає як ключового слова do (для позначки початку циклу), і ключового слова while (для позначки кінця циклу і зазначення умови). По-друге, на відміну циклу while, цикл do завершується точкою з комою. Цикл while необов'язково завершувати крапкою з комою, якщо тіло циклу укладено у фігурні дужки.

Цикл for

Цикл for є конструкцією циклу, яка часто виявляється більш зручною, ніж цикл while. Цикл for спрощує конструювання циклів, наступних шаблону, загальному більшості циклів. Більшість циклів мають деяку змінну-лічильник. Ця змінна ініціалізується перед початком циклу та перевіряється перед кожною ітерацією. Нарешті, змінна-лічильник інкрементується або змінюється будь-яким іншим чином наприкінці тіла циклу, безпосередньо перед повторною перевіркою змінної. Ініціалізація, перевірка та оновлення - це три ключові операції, що виконуються зі змінною циклу. Інструкція for робить ці три кроки явною частиною синтаксису циклу:

for(ініціалізація; перевірка; інкремент) ( інструкція )

Ініціалізація, перевірка та інкремент – це три вирази (розділених точкою з комою), які відповідальні за ініціалізацію, перевірку та збільшення змінної циклу. Розташування в першому рядку циклу спрощує розуміння те, що робить цикл for, і дозволяє забути ініціалізувати чи збільшити змінну циклу.

Найпростіше пояснити роботу циклу for, показавши еквівалентний йому цикл while:

ініціалізація; while (перевірка) ( інструкція; інкремент; )

Іншими словами, вираз ініціалізації обчислюється один раз перед початком циклу. Цей вираз, як правило, є виразом із побічними ефектами (зазвичай привласненням). JavaScript також допускається, щоб вираз ініціалізації був інструкцією оголошення змінної var, тому можна одночасно оголосити та ініціалізувати лічильник циклу.

Вираз перевірки обчислюється перед кожною ітерацією і визначає, чи виконуватиметься тіло циклу. Якщо результатом перевірки є справжнє значення, виконується інструкція, яка є тілом циклу. Наприкінці циклу обчислюється вираз інкременту. Щоб використання цього виразу мало сенс, воно має бути виразом із побічними ефектами. Зазвичай це вираз присвоювання, або вираз, що використовує оператор ++ або --.

Вивести числа від 0 до 9 можна також за допомогою циклу for, як показано нижче, на противагу еквівалентному циклу while, показаному в прикладі раніше:

For (var count = 0; count

Звичайно, цикли можуть бути значно складнішими, ніж у цих простих прикладах, і іноді у кожній ітерації циклу змінюється кілька змінних. Ця ситуація - єдиний випадок у JavaScript, коли часто застосовується оператор "кома" - він дозволяє об'єднати кілька виразів ініціалізації та інкрементування в один вираз, що підходить для використання в циклі for:

Var i,j; for (i = 0, j = 0; i

Цикл for/in

Цикл for/in використовує ключове слово for, але він відрізняється від звичайного циклу for. Цикл for/in має наступний синтаксис:

for (змінна in об'єкт) ( інструкція )

Як змінну тут зазвичай використовується ім'я змінної, але так само можна використовувати інструкцію var, що оголошує єдину змінну. Параметр об'єкта - це вираз, що повертає об'єкт. І як завжди, інструкція - це інструкція чи блок інструкцій, що утворюють тіло циклу.

Для обходу елементів масиву природно використовувати звичайний цикл:

Var arr =; for (var i = 0; i

Інструкція for/in також природно дозволяє виконати обхід властивостей об'єкта:

// Створимо новий об'єкт var obj = (name: "Alex", password: "12345"); for (var i in obj) ( // Вивести значення кожної властивості об'єкта console.log(obj[i]); )

Щоб виконати інструкцію for/in, інтерпретатор JavaScript спочатку обчислює вираз об'єкта. Якщо воно повертає значення null чи undefined, інтерпретатор пропускає цикл і переходить до наступної інструкції. Якщо вираз повертає просте значення, воно перетворюється на еквівалентний обгортку. В іншому випадку вираз повертає об'єкт. Потім інтерпретатор виконує по одній ітерації циклу для кожного перерахованого властивості об'єкта. Перед кожною ітерацією інтерпретатор обчислює значення висловлювання, зберігає їх у змінної і надає йому ім'я властивості (рядкове значення).

mob_info