- 3.6.1. Оператори JavaScript
- 3.6.2. умовний оператор
- 3.6.3. оператор вибору
- 3.6.4. Оператори циклу
- 3.6.4.1. оператор for
- 3.6.4.2. оператор while
- 3.6.4.3. Оператор do ... while
- 3.6.4.4. Мітки операторів
- 3.6.4.5. оператор break
- 3.6.4.6. оператор continue
- 3.6.5. Оператор for ... in
- 3.6.6. оператор with
- 3.6.7. Обробка винятків
- 3.6.7.2. Оператор try ... catch
- 3.6.7.3. оператор throw
- 3.6.8. функції
- 3.6.8.2. Виклик функції
- 3.6.8.3. рекурсивні функції
- 3.6.8.4. оператор return
- 3.6.8.5. об'єкт arguments
3.6.1. Оператори JavaScript
Наша взаимовыгодная связь https://banwar.org/
Управління послідовністю дій в ході виконання сценарію здійснюється за допомогою операторів. JavaScript містить стандартний набір операторів, успадкований від мов C ++ і Java, а саме:
- умовний оператор if ... else ;
- оператор вибору switch ;
- оператори циклу for , while , do ... while , break і continue ;
- оператор ітерації for ... in ;
- оператор вказівки об'єкта with ;
- оператори обробки виключень try ... catch і throw ;
- оператори декларації функцій function і повернення з функції return .
Наступні оператори описані в інших розділах довідника:
Будь-яке вираження JavaScript також є оператором.
3.6.2. умовний оператор
Умовний оператор if ... else дозволяє перевірити певну умову і, в залежності від його істинності, виконати ту чи іншу послідовність операторів. Він має дві форми:
if (умова) оператор1 if (умова) оператор1 else оператор2Тут умова - це будь-який вираз, значення якого може бути перетворено до логічного типу, оператор1 і оператор2 - будь-які групи операторів JavaScript; якщо ці групи містять більше одного оператора, то вони повинні бути укладені у фігурні дужки {}.
Перша форма оператора означає, що якщо значення умови істинно, то виконуються оператори1; якщо воно помилкове, то управління передається оператору, наступному за if.
Друга форма оператора означає, що якщо значення умови істинно, то виконуються оператори1; якщо воно помилкове, то виконуються оператори2.
Приклад використання умовного оператора в тілі функції, що повертає найбільше з трьох чисел:
function maxValue (x, y, z) {if (x> = y) {if (x> = z) return x; else return z; } Else {if (y> = z) return y; else return z; }}3.6.3. оператор вибору
Оператор вибору switch виконує ту чи іншу послідовність операторів в залежності від значення певного виразу. Він має вигляд:
switch (вираз) {case значення: оператори break; case значення: оператори break; ... default: оператори}Тут вираз - це будь-який вираз, значення - це можливе значення виразу, а оператори - будь-які групи операторів JavaScript.
Оператор вибору спочатку обчислює значення виразу, а потім перевіряє, чи немає цього значення в одній з міток case значення. Якщо ця позначка є, то виконуються оператори, такі з ним; якщо немає, то виконуються оператори, такі за міткою default (якщо вона відсутня, то управління передається оператору, наступному за switch).
необов'язковий оператор break вказує, що після виконання операторів управління передається оператору, наступному за switch. Якщо break відсутній, то після виконання операторів починають виконуватися оператори, що стоять після наступної мітки case (управління як би "провалюється" в наступну мітку).
У наступному прикладі значення змінної length перетворюється в метри в залежності від початкової одиниці вимірювань, заданої в змінної str. Зверніть увагу, що після case "м" немає оператора break; в даному випадку це означає, що ця мітка і мітка default обробляються однаково, а саме значення змінної length не змінюється.
var str = "см"; var length = 25; switch (str) {case "км": length * = 1000; break; case "см": length / = 100; break; case "м": default: break; }3.6.4. Оператори циклу
Цикл - це послідовність операторів, виконання якої повторюється до тих пір, поки певний умова не стане хибним. JavaScript містить три оператора циклу: for , while і do ... while , А також оператори break і continue , Які використовуються всередині циклів.
Близький до операторам циклу і оператор ітерації for ... in , Який використовується при роботі з об'єктами.
3.6.4.1. оператор for
Оператор циклу for має вигляд:
for (ініціалізація; умова; зміна) операторТут ініціалізація і зміна - це будь-який вираження, умова - будь-який вираз, значення якого може бути перетворено до логічного типу, оператор - будь-яка група операторів JavaScript; якщо ці група містить більше одного оператора, то вона повинні бути укладена в фігурні дужки {}. Ініціалізація може містити декларацію змінної .
Оператор for виконується наступним чином:
- Виконується вираз ініціалізація (зазвичай це вираз инициализирует лічильник або лічильники циклу).
- Обчислюється значення виразу умова. Якщо воно помилкове, то управління передається оператору, наступному за даними оператором.
- Виконується оператор.
- Виконується вираз зміна (зазвичай це вираз збільшує або зменшує лічильник або лічильники циклу) і управління передається етапу 2.
Даний оператор зазвичай використовується в тих випадках, коли кількість повторень циклу відомо заздалегідь. Наприклад, наступна функція обнуляє всі елементи масиву, переданого їй як аргумент:
function initArray (a) {for (var i = 0; i <a.length; i ++) a [i] = 0; }3.6.4.2. оператор while
Оператор циклу while має вигляд:
while (умова) операторТут умова - будь-який вираз, значення якого може бути перетворено до логічного типу, оператор - будь-яка група операторів JavaScript; якщо ці група містить більше одного оператора, то вона повинні бути укладена в фігурні дужки {}.
Оператор while виконується в такий спосіб:
- Обчислюється значення виразу умова. Якщо воно помилкове, то управління передається оператору, наступному за даними оператором.
- Виконується оператор і управління передається етапу 1.
При використанні даного оператора необхідно переконатися, що рано чи пізно умова стане хибним, т. К. Інакше сценарій увійде в нескінченний цикл, наприклад:
while (true) document.write ( "Привіт всім!");3.6.4.3. Оператор do ... while
Оператор циклу do ... while має вигляд:
do оператор while (умова)Тут умова - будь-який вираз, значення якого може бути перетворено до логічного типу, оператор - будь-яка група операторів JavaScript; якщо ці група містить більше одного оператора, то вона повинні бути укладена в фігурні дужки {}.
Оператор do ... while виконується в такий спосіб:
- Виконується оператор.
- Обчислюється значення виразу умова. Якщо воно помилкове, то управління передається оператору, наступному за даними оператором.
- Управління передається етапу 1.
Цей оператор відрізняється від оператора while тим, що цикл обов'язково виконується хоча б раз. приклад:
var i = 0; do document.write (i ++); while (i <10);3.6.4.4. Мітки операторів
Будь-оператор або блок операторів в сценарії на мові JavaScript може мати будь-яку кількість міток. Мітки використовуються операторами break і continue для вказівки того, до якого оператора вони відносяться. Позначений оператор має вигляд:
мітка: операторВ якості мітки може використовуватися будь-який ідентифікатор, який не є зарезервованим словом .
Хоча в сучасному програмуванні використання міток вважається поганим тоном, в деяких випадках їх застосування істотно спрощує логіку програми. Найчастіше це відбувається, коли мітки використовуються для передачі управління з глибоко вкладеного циклу до зовнішнього.
3.6.4.5. оператор break
Оператор break перериває виконання поточного циклу, оператора switch або позначений оператора і передає управління оператору, наступного за перерваним. Цей оператор може вживатися тільки всередині циклів while , do ... while , for або for ... in , А також всередині оператора switch . Він має дві форми:
break break міткаПерша форма оператора перериває виконання самого внутрішнього з циклів або операторів switch . Друга форма оператора перериває виконання оператора із заданою міткою.
Приклад оператора break в тілі функції, що повертає номер елемента масиву, що містить задане значення:
function findValue (a, theValue) {for (var i = 0; i <a.length; i ++) {if (a [i] == theValue) break; } Return i; }3.6.4.6. оператор continue
Оператор continue завершує поточну ітерацію поточного циклу або циклу, позначеного відповідної міткою, і починає нову ітерацію. Цей оператор може вживатися тільки всередині циклів while , do ... while , for або for ... in . Він має дві форми:
continue continue міткаПерша форма оператора завершує поточну ітерацію самого внутрішнього з циклів. Друга форма оператора завершує поточну ітерацію оператора із заданою міткою. При цьому перехід до наступної ітерації циклу відбувається наступним чином:
- цикли while і do ... while перевіряють умову циклу і, якщо воно істинно, починають чергове виконання циклу;
- цикл for виконує вираз зміна, перевіряє умова циклу і, якщо воно істинно, починає чергове виконання циклу;
- цикл for ... in переходить до наступного поля змінної і починає чергове виконання циклу.
У наступному прикладі до змінної n послідовно додаються значення 1, 2, 4 і 5:
var i = 0; var n = 0; while (i <5) {i ++; if (i == 3) continue; n + = i; }3.6.5. Оператор for ... in
Оператор for ... in виконує задані дії для кожного властивості об'єкта або для кожного елемента масиву. Він має вигляд:
for (змінна in вираз) операторТут змінна - це декларація змінної , Вираз - будь-який вираз, значенням якого є об'єкт або масив, оператор - будь-яка група операторів JavaScript; якщо ці група містить більше одного оператора, то вона повинні бути укладена в фігурні дужки {}.
Оператор for ... in виконується наступним чином:
- Змінної присвоюється ім'я чергового властивості об'єкта або чергового елемента масиву (це залежить від того, є значенням вирази об'єкт або масив).
- Виконується оператор.
- Управління передається етапу 1.
При ітерації масиву змінної послідовно присвоюються значення першого, другого, ..., останнього елемента масиву. Однак, при ітерації властивостей об'єкта неможливо передбачити, в якому порядку вони будуть присвоюватися змінної: цей оператор гарантує тільки те, що всі вони будуть переглянуті.
Наступний сценарій створює новий об'єкт ob, а потім послідовно виводить всі його властивості на екран оглядача:
var ob = { "а": "Архангельськ", "б": "Баку", "в": "Воронеж"}; for (var key in ob) document.write (key + ":" + ob [key] + "<BR>");На екрані з'явиться текст
а: Архангельськ б: Баку в: Воронеж3.6.6. оператор with
Оператор with задає ім'я об'єкта за замовчуванням. Він має вигляд:
with (вираз) операторТут вираз - будь-який вираз, значенням якого є об'єкт, оператор - будь-яка група операторів JavaScript; якщо ці група містить більше одного оператора, то вона повинні бути укладена в фігурні дужки {}.
Цей оператор діє таким чином. Для кожного ідентифікатора в операторі виконуюча система перевіряє, чи не є він ім'ям властивості об'єкта, заданого за замовчуванням. Якщо так, то цей ідентифікатор вважається ім'ям властивості, якщо ж ні, то ім'ям змінної.
Оператор with використовується для скорочення розміру програмного коду і прискорення доступу до властивостей об'єктів. Наприклад, для доступу до математичних функцій ми повинні кожен раз вказувати ім'я об'єкта Math:
x = Math.cos (Math.PI / 2) + Math.sin (Math.LN10); y = Math.tan (2 * Math.E);За допомогою оператора with цей фрагмент сценарію можна істотно скоротити:
with (Math) {x = cos (PI / 2) + sin (LN10); y = tan (2 * E); }Примітка. Оператор with може застосовуватися тільки до існуючих властивостей і методів об'єкта. Спроба створення нової якості або методу з його допомогою викличе помилку.
3.6.7. Обробка винятків
3.6.7.1. поняття виключення
В процесі виконання сценарію можливе виникнення непереборних помилок, які називаються винятками. Прикладами винятків є звернення до неіснуючого об'єкту або неможливість перетворення значення до заданого типу. Детальніше про реалізацію винятків см. Опис об'єктів Error .
Оператори, описані в цьому розділі, призначені для обробки винятків, що виникають в ході виконання сценарію, і генерації власних винятків.
3.6.7.2. Оператор try ... catch
Оператор try ... catch використовується в тих фрагментах сценарію, де може виникнути виняток, для його обробки. Він має вигляд:
try {оператор1} catch (виняток) {оператор2}Тут виняток - будь-яке ім'я змінної, а оператор1 і оператор2 - будь-які групи операторів JavaScript, укладені у фігурні дужки {}.
Оператор1 містить програмний код, в якому можливе виникнення виключення. Якщо виключення не виникло, то після виконання оператора1 управління передається звичайним чином оператору, наступного за try ... catch. Якщо ж воно виникло, то інформація про виключення заноситься в локальну змінну виняток, і управління передається оператору2, який повинен містити код обробки цього винятку.
Якщо виникло виключення не може бути тут оброблено, то оператор2 повинен містити оператор throw для передачі виключення обробнику переривань більш високого рівня. Приклад використання цього оператора наведено в наступному розділі.
Див. також WDH +: Оператор try ... catch в IE4 .
3.6.7.3. оператор throw
Оператор throw генерує виняток, яке може бути оброблено оператором try ... catch . Він має вигляд:
throw винятокде виключення - будь-який вираз.
Значення виразу виняток присвоюється локальної змінної, зазначеної в операторі catch. Приклад генерації виключення і його обробки:
function getMonthName (month) {month = month - 1; // Переводимо month в індекс масиву (1 = січень, 12 = грудень) var months = new Array ( "січень", "лютий", "март", "квітень", "травень", "червень", "липень", "серпень", "вересень", "жовтень", "листопад", "грудень"); if (months [month]! = null) return months [month]; else throw "Невірний місяць"; } Try {monthName = getMonthName (myMonth); // можливе виключення} catch (e) {monthName = "невідомо"; } Document.write (monthName);3.6.8. функції
3.6.8.1. декларація функції
Функції є одним з основних механізмів мови JavaScript; вони охоплюють ту область, яка в інших мовах програмування реалізується подпрограммами, процедурами і функціями. Функція в JavaScript - це набір операторів, що виконують певне завдання.
Для того, щоб користуватися функцією, ми повинні спочатку її визначити. Декларація функції має вигляд:
function ім'я (аргументи?) {оператори}Тут ім'я - ідентифікатор, що задає ім'я функції, аргументи - необов'язковий список ідентифікаторів, розділених комами, який містить імена формальних аргументів функції, а оператори - будь-який набір операторів, який називається тілом функції і виконується при її виклику.
Розглянемо наступний приклад:
function cube (number) {return number * number * number; }Ця функція називається cube і має один формальний аргумент number. При виклику цієї функції замість формального аргументу підставляється його фактичне значення, функція виконує зведення цього значення в куб і повертає отримане число оператором return .
Змінні, декларовані в тілі функції, є локальними, т. Е. Недоступні поза її тіла. Подробиці див. В описі області дії змінних .
3.6.8.2. Виклик функції
Важливо розуміти, що поява декларації функції в тексті сценарію не означає її негайного виконання; тіло функції буде виконуватися тільки тоді, коли будь-якої оператор буде містити виклик цієї функції. Наприклад, функція з попереднього прикладу може бути викликана так:
В результаті змінна x отримає значення 125.
В JavaScript діють наступні правила передачі аргументів функції:
- аргументи примітивних типів передаються функції за значенням. Іншими словами, формальним аргументам присвоюються значення фактичних аргументів на момент виклику і, якщо навіть оператори в тілі функції змінять значення якийсь аргумент, то ця зміна не торкнеться змінної, чиє значення передавалося як аргумент.
- Об'єкти (і вбудовані , і певні користувачем ) Передаються по посиланню. Це означає, що всі зміни властивостей об'єкта в тілі функції виробляються безпосередньо в самому об'єкті, а не в його локальної копії і, отже, зберігаються після повернення з функції. наприклад,
3.6.8.3. рекурсивні функції
Важливою особливістю мови JavaScript є те, що функція може викликати не тільки інші функції, але і сама себе. Такі функції називаються рекурсивними; у багатьох випадках використання рекурсії дозволяє писати короткий код замість складних вкладених циклів. Слід, однак, враховувати, що рекурсія працює повільніше, ніж звичайний цикл, і користуватися нею тільки в тих випадках, коли це дійсно виправдано.
Наведемо приклад функції, що обчислює факторіал числа (факторіал числа n дорівнює 1 * 2 * ... * n):
function factorial (n) {if (n <= 1) return 1; else return (n * factorial (n-1)); }Неакуратно написана рекурсивна функція може увійти в нескінченний цикл і ніколи не повернути результату. Наприклад, спроба обчислити факторіал негативного числа за допомогою наведеної функції призведе саме до такого результату.
3.6.8.4. оператор return
Ми бачили в попередніх прикладах, що функції JavaScript можуть (але не зобов'язані) повертати значення. Для вказівки цього значення використовується оператор return, який має дві форми:
return вираз returnПерша форма оператора завершує виконання функції і повертає значення виразу. Функція, що містить такий оператор return, повинна викликатися як частина виразу присвоювання, наприклад x = 2 * cube (a).
Друга форма оператора завершує виконання функції і повертає значення undefined. Функція, що містить такий оператор return, повинна викликатися як оператор, наприклад setBrowser (myBrowser).
Якщо тіло функції не містить оператора return, то її виконання завершується з виконанням останнього оператора тіла і повертається значення undefined.
3.6.8.5. об'єкт arguments
При вході в тіло функції створюється локальний об'єкт arguments, який має такі властивості:
- властівість callee з атрибутами { DontEnum }. Початкова значення цієї Властивості є віконуваній в Сейчас об'єкт Function. Це властівість Забезпечує можлівість рекурсивного виклику безіменніх функцій.
- властівість length з атрибутами { DontEnum }. Початковим значенням цієї властивості є кількість фактичних аргументів, переданих функції при її виклику.
- Масив значень фактичних аргументів функції . Для доступу до значень масиву використовується синтаксис: функція. arguments [i]
де функція - ідентифікатор, що задає ім'я поточної функції, а i - номер аргументу, починаючи з нуля.
Цей об'єкт корисний в тих випадках, коли ми заздалегідь не знаємо кількості аргументів, які будуть передані даної функції. У наступному прикладі функція initArray створює новий масив і копіює в нього список своїх фактичних аргументів.
function initArray () {this.length = initArray.arguments.length; for (var i = 0; i <this.length; i ++) this [i] = initArray.arguments [i]; } Var myFriends = new initArray ( "Михайло", "Максим", "Сергій", "Леонід");Аргументи?