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

Де писати код?

JavaScript-код можна писати двома способами: всередині парного теґа , або в окремому файлі, який підключається до веб-сторінки теґом <script>. Невеликі кількості коду можливо тестувати в консолі браузера. Справжній лінуксоїд знайде консоль і в браузері. Отже, щоб писати код між теґами необхідно відкрити і закрити теґ <script> і в відкриваючому теґу вказати атрибут type з значенням “text/javascript”:
<script type='text/javascript'> 
    /* сюди код */
</script>
Для того, щоб винести код JavaScript в окремий файл, також скористаємось теґом , але з іншим атрибутом — src.
<script src='URL/до/вашого/js/файлу.js'> </script>
Дані теги можна розміщувати як в тілі HTML-сторінки (“<body>”) так і в її заголовку (“<head>”).

Коментарі

Ще раз про важливість коментарів — без них важко розібратись у власному коді. У JavaScript коментарі двох типів, як у C++ - багаторядковий коментар і однорядковий:
//даний коментар від початку подвійного слешу до нового рядка

/* даний коментар може 
містити безліч рядків */

Змінні

Тепер ми готові перейти до найпростішої теми програмування — змінні. Змінні у JavaScript створюються за допомогою оператора “var”, після якого йде ідентифікатор нової змінної:
var var_name ;
var _varname ;
Як і у більшості мов програмування, ідентифікатори можуть починатися з букв латинського алфавіту або символу підкреслення, можуть мати в собі цифри і більш нічого. У Вас може виникнути питання: “А як вказати тип змінної, як інтерпретатор зможе відрізнити цілочисельну змінну від рядка”? Відповідь — ніяк. Ви не зможете вказати тип змінної тому, що JavaScript немає статичної типізації, що і відрізняє її від мов програмування на подобі C++ і Java. У JavaScript одній змінній можна присвоїти значення як числа, цілого або з плаваючою крапкою, так і рядка символів або бульове значення. І залиште усі подробиці даного механізму інтепретатору JavaScript. Це дасть вам змогу більше сконцентруватися на конкретній задачі, а не не складнощах використання технології. До слова, функції збирання сміття (“garbage collector”) також винесені на інтепретатор. JavaScript розрізняє декілька наступних типів значень:
  • числа;
  • рядки символів;
  • бульове значення;
Також самі змінні можуть бути масивами, асоціативними масивами (ключ-значення) і об'єктами. Прикладами ініціалізації змінної можуть бути:
var myvar ; 

myvar = 10 ; /* ціле число */ 
myvar = 3.1415 ; /* дійсне число */ 
myvar = 'My super' + " value" ; /* рядок (конкатенація рядків) */ 
myvar = true ; /* бульове значення */ 

myvar = {x: 10, y: 15 } ; /* об'єкт з властивостями x і y */
myvar.z = 3 ; /* додаємо нову властивість до об'єкту */

myvar = [1, 2, 10, 5] ; /* масив значень */
myvar[4] = 15 ; /* додаємо новий елемент до масиву */

myvar = {} ; /* також об'єкт без властивостей */
myvar = [] ; /* і пустий масив */
Хоча одна змінна може приймати різні за типом значення, вони все-таки мають синтаксичні і семантичні відмінності. Особливу увагу необхідно приділяти семантичним відмінностям, тобто спосіб поводження з даними. Якщо не брати їх до уваги — можуть виникнути зовсім непередбачувані ситуації. Як наприклад
var a = '2' ; /* рядок символів */
var b = 2 ; /* цілочисельне значення */
var c = a + b ; /* c = 22 */

Оператори вибірки

Оператор вибірки має наступний синтаксис:
if ( /* логічна умова */ )
{
	/* оператори, які виконуються при істинності умови */
}
else
{
	/* оператори, які виконуються при не істинності умови */
}
Також ви можете після ключового слова else вставити інший оператор if з необхідною умовою, що дасть змогу перевіряти і діяти згідно декількох альтернативних умов (або ж предикатів).
if ( /* логічна умова 1 */ )
{
	/* оператори, які виконуються при істинності умови 1 */
}
else if (/* логічна умова 2 */ )
{
	/* оператори, які виконуються при істинності умови 2 */
}
else
{
	/* оператори, які виконуються при хибності попередніх умов  */
}
Оператор if також можна використовувати і без альтернативних команд після ключового слова else:
if ( /* логічна умова */ )
{
	/* оператори, які виконуються при істинності умови */
}
У JavaScript також присутній тренарний оператор, який корисний тим, що на відміну від простого оператора вибірки, повертає значення згідно істинності умови. Його синтаксис:
/* умова */ ? /* значення при істинності умови*/ : /* значення при помилковості умови */ ;
Для вибірки умови з декількох констант, використовують оператор switch, який має наступних синтаксис:
switch (/* умовний вираз, або змінна */)
{
	case /* ймовірне значення змінної 1 */ :
		/* оператори випадку 1 */
		break ;

	/* інші case-оператори */

	default: 
		/* операції з даного блоку виконуються, коли 
		** не справдилась жодна з попередніх умов */
}
Необхідно пам'ятати, що при відсутності оператора break після команд кожної умови, команди будуть продовжувати своє виконання, поки не закінчиться блок оператора switch.

Цикли

У JavaScript, як і в С/С++, Java і багатьох інших мовах програмування присутні три види циклів:
  • цикл з передумовою (while);
  • цикл з після умовою (do/while);
  • цикл for.
Цикл з передумовою має наступний синтаксис:
while ( /* умова */ )
{
	/* дані оператори виконуються циклічно
	** поки дійсна умова */
}
Особливість даного циклу полягає у тому, що виконання операторів в тілі циклу може так і не виконатись, якщо умова не справджується вже перед першою ітерацією циклу. Цикл з після умовою виглядає наступним чином:
do
{
	/* оператори тіла циклу з після умовою */
}
while ( /* умова */ ) ;
Особливість даного циклу полягає в тому, що оператори в його тілі виконуються хоча б один раз. Цикл for в JavaScript, має два види — це звичайний цикл for і цикл for з використанням оператора in. Звичайний цикл for має вигляд:
for (/* ініціалізація умов циклу*/; /* перевірка умов ітерацій */; /* інкремент змінних */)
{
	/* оператори тіла циклу */
}
Через цикл for з використанням оператора in проявляється “скриптовість” JavaScript. В загальному, даний цикл виглядає наступним чином:
for ( /* змінна */ in /* об'єкт */)
{
	/* оператори тіла циклу */
}
Що виконує даний цикл? Він ініціалізує змінну, вказану перед інструкцією in, у кожне значення, яке присутнє в об'єкті і виконує операції в тілі циклу, до поки не буде досягнуто останнього значення об'єкту. Операторам циклу буде доступна змінна з одним з значень присутнім у вказаному об'єкті. Також слід вказати декілька корисних операторів, яка часто використовуються з циклами — це оператор continue і break. Інструкція continue корисна тим, що перериває виконання подальших операторів з тіла циклу в даній ітерації, і ініціалізовує нову ітерацію циклу. Наприклад, розглянемо наступний код:
for (var i=0; i<5; ++i)
{
	if (i==3)
	{ continue ; }

	alert (i) ; /* дана функція виводить повідомлення */
}
Даний цикл виводить повідомлення з значенням змінної i, окрім значення '3', оскільки оператор вибірки, який присутній в тілі циклу, перевіряє, чи рівна змінна i значенню '3'. Якщо дана умова справджується, тобто змінна i рівна '3' — виконується інструкція continue, що призводить до переривання виконання операторів і ініціювання наступної ітерації циклу. Тобто виконання переходить до шапки циклу, яка виконує інкремент змінної і перевіряє умову. В результаті даних дій на екрані з'являться повідомлення з вмістом від '0' до 4 включно, окрім значення '3'. Інструкція break перериває виконання операторів тіла циклу і також перериває виконання самого циклу. Тобто після виконання оператора break всередині циклу, цикл більше не буде виконуватись і управління перейде до коду, який є наступним за даним циком. Модифікуємо наш попередній приклад з оператором continue наступним чином:
for (var i=0; i<5; ++i)
{
	if (i==3)
	{ break ; }

	alert (i) ; /* дана функція виводить повідомлення */
}
Виконання даного коду спровокує почерговий вивід на екран повідомлень з значенням змінної i починаючи від значення '0' до значення '2' включно. Але коли після інкременту змінної 'i', яка мала значення 2, до значення 3, справдиться умова в операторі вибірки і виконаються інструкції його тіла. Себто, в нашому випадку, спрацює інструкція break і цикл завершить своє виконання. З циклами необхідно бути обачливими, оскільки, при не дбалому ставленні, вони можуть так і не завершити свої ітерації, і Ви будете змушені закривати вкладку браузера. Хоча цикли інколи використовують саме у таких цілях, наприклад, коли потрібно прослуховувати події від користувача. Приклад безкінечних циклів:
var a = 0;

while (a<5)
{
	alert (a) ;
}
/* інкремент змінної a */

/* безкінечний цикл for */
for (;;)
{}

do
{
	alert (a) ;
}
while (a=0) ;
/* оператор = завжди повертає true */

Математичні і логічні оператори

Тепер слід розглянути оператори, які допоможуть Вам оперувати над значенням змінних. До них відносять математичні оператори, результатом виконання яких є безліч нових значень, і логічні оператори, які повертають тільки значення true або false. До математичних операторів ми можемо віднести: додавання “+”, віднімання “-”, множення “*”, ділення “/” і остача від ділення “%”. Разом з оператором “=”, дані оператори утворюють скорочений запис. Оператор '=' присвоює значення змінній, яка знаходиться зліва від нього, значення обчисленого виразу, яке знаходиться з права від оператора. Приклад використання усіх операторів:
var result ;

result = 2 + 2 ; /* result містить 4 */
result = 2 - 2 ; /* result містить 0 */
result = 2 * 3 ; /* result містить 6 */
result = 6 / 3 ; /* result містить 2 */
result = 5 % 2 ; /* result містить 1 */
result = 2 + 2 * 2 ; /* result містить 6 */
result = (2 + 2)* 2 ; /* result містить 8 */

result = 2 ;
result += 2 /* result містить 4, аналогічно result = result + 2 */

result = 2 ;
result *= 2 /* result містить 4 аналогічно result = result * 2 */

result = 5 ;
result %= 2 /* result містить 1 аналогічно result = result % 2 */
До логічних операторів відносяться: оператор рівності “==” і не рівності “!=”; оператори відношення “>” (більше), “=”(більше рівне), “<=”(менше рівне); оператори логічно порівняння “&&” (логічне І), “||” (логічне АБО), “!” (логічне заперечення НЕ), “^” (виключне АБО).
var result ;

result = 10 > 20 ; /* result містить false */
result = 10 <= 20 ; /* result містить true */
result = true && false ; /* result містить false */
result = true || false ; /* result містить true */
result = !false ; /* result містить true */
result = true != true /* result містить false */
Математичні оператори мають більший пріоритет, ніж логічні. Наприклад, розглянемо наступний вираз:
var result ;
var a = 5 ;

result = a > 2 + 4 ;
В даному випадку змінна result буде містити значення false, оскільки інтепретатор надасть перевагу математичному оператору “+” перед логічним оператором порівняння “>”, і тому спочатку обчислюється вираз “2+4”, а потім робиться порівняння змінної “а” з результатом обчислення. Оскільки 5 менше за 6, оператор порівняння видасть значення false, яке і запишеться у змінну result. Але якщо ми модифікуємо вираз наступним чином:
var result ;
var a = 5 ;

result = (a > 2) + 4 ;
Тоді у змінну result запишеться значення 5. Оскільки, оператор дужок має вищий пріоритет, ніж математичні (в тому числі і логічні) оператори, тому спочатку обчислиться результат порівняння змінної a з значенням 2, що видасть значення true, оскільки значення 5 більше ніж 2. Далі інтепретатор перетворить обчислене в дужках значення true в число 1 (true відповідає 1, а false — 0) і додасть до 4. Кінцевий результат, через оператор присвоєння запишеться в змінну result. Якщо Ви не впевнені у тому, в якій послідовності будуть виконуватись оператори, або бажаєте змінити послідовність їх виконання — використовуйте оператор дужок, який має найбільший пріоритет.

Функції

За допомогою функцій, Ви можете ізолювати код, який буде використовуватись у багатьох місцях, що в свою чергу зменшить загальну кількість коду і зробить його більш наглядним. Функції у JavaScript мають наступний синтаксис:
function /* ідентифікатор функції */ ( /*параметри функції через кому */ )
{
	/* оператори або код тіла функції */
}
Наприклад, створимо функцію з ідентифікатором myfunction (себто її ім'я), яка буде обчислювати різницю довжин двох рядків символів:
function myfunction (str1, str2)
{
    return str1.length - str2.length ;
}

var s1 = “AAA” ;
var s2 = “A” ;

var result = myfunction (s1, s2) ; /* result містить 2 */
Функції можна передавати як аргументи іншим функціям, або присвоювати змінним. В такому разі, можна звертатись до змінної або до властивості об'єкту, як до функції. Наприклад,
/* функція, яка виводить повідомлення */
function show (msg)
{ alert (msg) ; }

var obj = {} ; /* створюємо пустий об'єкт */

/*створюємо нову властивість об'єкту 
** і записуємо в нього адресу функції */
obj.method = show ;

/* викликаємо функцію show */
obj.method('Hallo, World') ;

Приклад

Прикладом використання JavaScript може виступити наступна програма:
<html>

 <head>
 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />	
 
  <title>Вивчаємо JavaScript</title>
  
  <script>
  
    function ShowUserName ()
    {
        var uname = document.getElementById ('UserName').value ;
        
        if (uname.length==0)
        {
            alert ('Введіть своє ім\`я') ;
            
            return false ;
        }
        
        var msg = "Привіт, " + uname + ", як справи?" ;
            
        alert (msg) ;
    }
        
  </script>
  
 </head>
 
 <body>
 
  Введіть своє ім'я: <input type='text' size=50 id='UserName'>
  <input type='button' value='Клікни' onClick='ShowUserName()'>
 
 </body>
 
</html>
Після відкриття файлу з даним кодом, ми можемо отримати результат: simple_javascript_examplesimple_javascipt_alert

Резюме

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