Відмінності між версіями «Змінні та типи данних в JavaScript»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показано 94 проміжні версії 3 учасників)
Рядок 1: Рядок 1:
== '''Типи данних''' ==
+
= '''Змінні''' =
  
 +
У сценаріях JavaScript можна використовувати змінні, звертаючись до них за назвою. Змінні можуть бути глобальними або локальними. Глобальні змінні досяжні з довільного місця сценарію. Область дії локальних змінних обмежено кодом функції, всередині якого оголошено ці змінні. При створенні сценаріїв JavaScript рекомендовано оголошувати змінні до їхнього використання та надавання початкових величин. Це спрощує відлагодження сценаріїв і зменшує ймовірність помилки.
  
=== '''Опис типів даних''' ===
+
==Оголошення змінної==
  
 +
Оголосити змінну у JavaScript можна при допомозі ключового слова ''var'', таким чином:
 +
'''var''' ''назва змінної''
 +
''Тип змінної'' JavaScript надає лише при наданні змінній певної величини. Після такого надання назва змінної стане доступною, навіть якщо її попередньо не було оголошено.
 +
<br>''Назва змінної:''
 +
* має починатися начинаться з літери латиниці або символів "_" чи "$", містити лише літери латиниці, цифри і символи "_" та "$";
 +
* не може збігатися з жодним з таких зарезервованих слів JavaScript:
 +
[[Файл:spisok_slov.JPG]]<br>
 +
<br>'''Надання змінним величини''' здійснюють за допомогою оператора "=". Наприклад, оголошення змінної і надання їй величини текстового рядка можна здійснити так:
 +
var Hello;
 +
Hello = "Привіт!";
 +
При цьому у довільному місці програми змінній ''Hello'' можна надати числельну величину, наприклад, так:
 +
Hello = 4;
 +
Після здійснення такої операції тип змінної буде змінено, але у процесі інтерпретації сценарію не буде зроблено жодного попереджувального повідомлення. Змінній можна надати спеціальну величину ''null''. У цьому випадку змінній не призначено жоден з типів.<br>
 +
<br>Тип ''число'' допускає використання різних форматів, наприклад,:
 +
:25 — запис цілого числа у десятковій системі числення;
 +
:0137 — запис цілого числа у вісімковій системі числення;
 +
:0xFF — запис цілого числа у шістнадцятковій системі числення;
 +
:386.7 — запис дійсного числа с плавающей десятковою крапкою;
 +
:25e5 або 25E5 — запис дійсного числа в науковій нотації, дорівнює 25 ∙ 10<sup>5</sup>.<br><br>
 +
:Якщо результат виконання операцій з числами не можна подати числом, то повертається величина NaN (від англійською ''Not a Number'').
 +
::    Тип ''текстовий рядок'' описує послідовність символів між лапками (' або ", але одного вигляду). Слід зауважити, порожній рядок відмінний від ''null''.
 +
:    Тип ''логічних даних'' передбачає лише дві величини: ''true'' і ''false''.
 +
::    Якщо змінну було оголошено, але їй не було надано величини, вона має ''невизначений тип''.
 +
:    Якщо у виразах зустрічаються змінні різних типів, інтерпретатор JavaScript може автоматично перетворити числові дані в рядки тексту. Перетворення рядка у число виконують лише з допомогою спеціальних функцій ''parseInt'' (у ціле) і ''parseFloat'' (у дійсне).
  
Мова JavaScript містить шість типів даних '''Undefined'''(невизначений), '''Null''' (нульовий), '''Boolean''' (логічний), '''String'''  (строковий), '''Number''' (числовий) і '''Object''' (об'єктний). Ця відносно невелика кількість типів дозволяє, тим не менше, створювати повноцінні сценарії для виконання багатьох функцій.
+
= '''Типи даних''' =
  
==== '''Тип Undefined (невизначений)''' ====
+
Мова JavaScript містить шість типів даних: Undefined (непроникний), Null (нульовий), Boolean (логічний), String (рядковий), Number (числовий) і Object (об'єктний). Це відносно незначна кількість типів дозволяє, тим не менше, створювати повноцінні сценарії для виконання багатьох функцій.
 +
:Базові типи - це String (рядковий), Number (числовий) і Boolean (логічний).
 +
У Javascript є і об'єктні типи даних і елементарні, які можна інтерпретувати як об'єкти.
 +
<center><br>[[Файл:типы_данных_JS.JPG]]<br></center>
 +
<br>Елементарні - створюються простою вказівкою даних:
 +
var orange = "Апельсин"
 +
Об'єктні - наприклад, через оператор new:
 +
var orange = new String("Апельсин")
 +
На практиці, хоча для кожного елементарного типу є відповідний об'єкт, використовувати їх не рекомендується. Це - відмерла частина мови.
 +
var ok = new Boolean(true) // не треба
 +
Елементарні типи автоматично інтерпретуються як об'єкти при викликах методів, тому можна, визначати довжину рядка як:
 +
alert("Апельсин".length)
 +
Тому іноді кажуть, що в javascript - всі об'єкти. Так зручно думати, але певна різниця все ж є.
 +
<br>Наприклад, typeof видасть різний результат:
 +
alert(typeof "test")
 +
<center>[[Файл:результат_1.JPG]]<br></center>
 +
alert(typeof new String("test"))
 +
<center>[[Файл:результат_2.JPG]]<br></center>
 +
<br>Це - ще одна причина уникати використання об'єктів там, де існує елементарний тип: менше плутанини.<br>
 +
<br>Перетворення типу можна явним чином зробити через його назву:
 +
var test = Boolean("something") // true
 +
Крім усім відомих типів даних - в javascript є спеціальне значення undefined, яке, умовно кажучи, позначає що "даних немає". Не null, а даних немає. Розумійте як хочете.
  
Цей тип складається з єдиного значення '''undefined'''. Це значення, яке приймає змінна, яка оголошена в програмі, але якої ще не присвоєно ніякого значення.
+
==Тип Number (числовий)==
  
==== '''Тип Null (нульовий)''' ====
+
Цей тип має формат з плаваючою комою і може задаватись в довільній формі, наприклад, 1.349, 12, .0529,-1.5e10. Запис цілих чисел можлива в вісімковій (починається з O) або шістнадцятковій (починається з Ox) формі. Якщо в ході операцій виникає помилка (наприклад, при діленні на нуль), то змінна отримає значення NaN (not-a-number, що не число).<br>
 +
<br>Всі числа зберігаються у форматі float64, т.е 8 байт з плаваючою крапкою. У цьому форматі не завжди можливі точні обчислення.
 +
Наприклад,
 +
alert(0.1+0.2)  // виведе не 0.3!
 +
<center>[[Файл:результат_3.JPG]]<br></center>
 
<br>
 
<br>
Спеціальне значення NULL говорить про те, що змінна не має значення.
+
===Цікаві методи===
Змінна вважається NULL, якщо: <br>
+
їй була присвоєна константа NULL ($var = NULL);
+
їй ще не було присвоєно яке-небудь значення;
+
вона була вилучена за допомогою unset().
+
<br>
+
Існує тільки одне значення типу NULL – регістронезалежне ключове слово NULL.
+
<br>
+
Цей тип складається з єдиного значення '''null'''. Це значення означає нульове, порожне або неіснуюче посилання.
+
  
==== '''Тип Boolean (логічний)''' ====
+
====Округлення до потрібної точності після коми====
<br>
+
Цей найпростіший тип виражає істинність значення, тобто змінна цього типу може мати тільки два значення – істина TRUE або неправда FALSE.
+
  
Щоб визначити булевий тип, використовують ключове слово TRUE або FALSE. Обидва регістронезалежні. <br>
+
Для цього використовується метод toFixed.
  <?php
+
  0.1234.toFixed(2) = 0.12
  $test = True;
+
?>
+
<br>
+
Логічні змінні використовуються в різних керуючих конструкціях (циклах, умовах і т.п). Мати логічний тип, тобто приймати тільки два значення, істину або неправду, можуть також і деякі оператори (наприклад, оператор рівності). Вони також використовуються в керуючих конструкціях для перевірки яких-небудь умов. Наприклад, в умовній конструкції перевіряється істинність значення оператора або змінної й у залежності від результату перевірки виконуються ті або інші дії. Тут умова може бути істинною або хибною, що саме і відбиває змінна й оператор логічного типу.
+
<br>
+
Цей тип складається рівно з двох логічних значень: '''true''' (істина) і '''false''' (брехня).
+
  
==== '''Тип String (строковий)''' ====
+
====Конвертація у число====
  
Цей тип складається з усіх можливих текстових рядків. Кожен рядок представляє собою упорядкований масив з нуля або більше символів Unicode (тобто 16-бітових цілих чисел без знака), званих ''елементами рядка.'' Елементи рядка нумеруються, починаючи з нуляДовжина рядка - це кількість елементів в ній; порожній рядок складається з нуля елементів.
+
Стандартно конвертація здійснюється викликом Number (). Можна і простіше: + str.
 +
// еквівалентні записи
 +
var str = "002"
 +
var a = Number(str) // 2
 +
// нечисла перетворюються в NaN
 +
+"0.1"  // => 0.1
 +
+"0.1z" // => Number.NaN
 +
Крім жорсткої конвертації є і більш м'яка фільтрація в число:
 +
// обрізається все після числа
 +
parseFloat("0.1zf") = 0.1
 +
parseInt("08f.4", 10) = 8
 +
// тут числа взагалі немає, тому NaN
 +
parseFloat("smth") = Number.NaN
 +
parseFloat, parseInt переводять зліва направо, поки це можливо. Якщо взагалі неможливо - то NaN.<br>
 +
<br>Другий аргумент parseInt - основа системи числення. Якщо його немає, то система сама намагається вгадати систему числення:
 +
  parseInt("0x10") = 16 // т.я 0x означає 16-річну систему
 +
parseInt("010") = 8 // т.я провідний 0 означає 8-річну систему
 +
// якщо хочете без сюрпризів - вказуйте основу явно
 +
parseInt("010",10) = 10
  
==== '''Тип Number (числовий)''' ====
+
====Математика====
  
Цей тип має рівно 18437736874454810627 (тобто 2<sup>64</sup> - 2<sup>53</sup> + 3)64-бітовому формату плаваючих чисел подвійної точності IEEE 754 з тим єдиним винятком, що 9007199254740990 (тобто 2<sup>53</sup> - 2) різних значень "Не число" даного формату представляються в JavaScript одним значенням '''NaN'''.  
+
Всі математичні функції знаходяться в "пакеті" Math. Не те, щоб у javascript є реальні пакунки просто так вийшло.
Ще два спеціальні значення - це додатня незкінченність і відємна нескінченність яким в JavaScript відповідають вираження '''+ Infinity''' (або просто '''Inifinity''') і '''-Infinity'''. Відзначимо також, що в даному форматі розрізняються позитивний нуль ('''+0''' або '''0''') і негативний нуль ('''-0''').
+
* Math.floor () / Math.round () / Math.ceil () - округлення
 +
* Math.abs () - модуль числа
 +
* Math.sin () і т.д
  
==== '''Тип Object (об'єктний)''' ====
+
==Тип String (рядковий)==
<br>
+
Складається з усіх можливих текстових рядків. Кожен рядок представляє собою упорядкований масив з нуля або більше символів Unicode (тобто 16-бітових цілих чисел без знаку), які називаються частинами рядка. Елементи рядків нумеруються, починаючи з нуля.  
Об'єкти – тип даних, що прийшов з об’єктно-орієнтованого програмування (ООП). Відповідно до принципів ООП, клас – це набір об'єктів, що володіють визначеними властивостями і методами роботи з ним, а об'єкт відповідно – представник класу. Наприклад, програмісти – це клас людей, що пишуть програми, вивчають комп'ютерну літературу і, крім того, як усі люди, мають ім'я і прізвище. Тепер, якщо взяти одного конкретного програміста, Васю Іванова, то можна сказати, що він є об'єктом класу програмістів, має ті ж властивості, що й інші програмісти, теж має ім'я, пише програми і т.п.
+
* Лапки подвійні і одинарні працюють однаково
<br>
+
* Можна вказувати Юнікодні символи через \ uXXXX:
У PHP для доступу до методів об'єкта використовується оператор ->. Для ініціалізації об'єкта використовується вираз new, що створює для змінної екземпляр об'єкта. <br>
+
** "зірочка: \ u002a"
<?php
+
* Вбудовані регулярні вирази, методи replace / match:
  //створюємо клас людей
+
** "превед медвед". replace (/ (. *?) \ s (. *) /, "$ 2, $ 1!") / / => медвед, превед!
class Person
+
Як це зазвичай і буває, у регулярки символ \ w позначає латинські буквоцифри або підкреслення, але не російські літери.
{
+
// метод, що навчає людини PHP
+
    function know_php()
+
        {
+
            echo "Тепер я знаю PHP";
+
        }
+
}
+
$bob = new Person; // створюємо об'єкт
+
                  // класу людин
+
$bob -> know_php(); // навчаємо його PHP
+
?>
+
<br>
+
Значенням цього типу є ''об'єкти''. Об'єкт - це невпорядкований набір властивостей
+
  
===='''Тип integer (цілі)'''====
+
Довжина рядка зберігається у властивості length.
<br>
+
Цей тип задає число з множини цілих чисел '''Z = {..., -2, -1, 0, 1, 2, ...}.''' Цілі числа можуть бути зазначені в десяткової, шістнадцятковій або вісімковій системі числення, за бажанням з попереднім знаком '''«-» або «+».'''<br>
+
Якщо ви використовуєте вісімкову систему числення, ви повинні випередити число 0 (нулем), для використання шістнадцяткової системи потрібно поставити перед числом 0x. <br>
+
<?php
+
# десяткове число
+
$a = 1234;
+
# від’ємне число 
+
$a = -123;
+
# вісімкове число (еквівалентно 83 у десятковій системі)
+
$a = 0123;
+
# шістнадцяткове число (еквівалентно 26 у десятковій системі)
+
$a = 0x1A;
+
?>
+
<br>
+
Розмір цілого залежить від платформи, хоча, як правило, максимальне значення біля двох мільярдів (це 32-бітне знакове). Беззнакові цілі PHP не підтримує.
+
<br>
+
Якщо ви визначите число, що перевищує межі цілого типу, воно буде інтерпретоване як число з плаваючою крапкою. Також якщо ви використовуєте оператор, результатом роботи якого буде число, що перевищує межі цілого, замість нього буде повернуте число з плаваючою крапкою.
+
<br>
+
У PHP не існує оператора ділення націло. Результатом 1/2 буде число з плаваючою крапкою, 0.5. Ви можете звести значення до цілого, що завжди округляє його в меншу сторону, або використати функцію round(), що округляє значення за стандартними правилами. Для перетворення змінної до конкретного типу потрібно перед змінною вказати в дужках потрібний тип. Наприклад, для перетворення змінної $a=0.5 до цілого типу необхідно написати (integer)(0.5) або (integer) $a або використовувати скорочений запис (int)(0.5). Можливість явного визначення типів по такому принципі існує для всіх типів даних (звичайно, не завжди значення одного типу можна перевести в інший тип). Ми не будемо поглиблюватися в усі тонкості визначення типів, оскільки PHP робить це автоматично в залежності від контексту.
+
<br>
+
===='''Тип float (числа з крапкою, що плаває)'''====
+
  
Числа з плаваючою крапкою, (вони ж числа подвійної точності або дійсні числа) можуть бути визначені з допомогою будь-якого з наступних синтаксисів: <br>
+
==Тип Boolean (логічний)==
<?php
+
У javascript - особливий список значень, які при приведенні до Boolean стають false. Він відрізняється, наприклад, від аналогічного списку в PHP.
  $a = 1.234;
+
  $b = 1.2e3;
+
  $c = 7E-10;
+
?>
+
<br>
+
Розмір цілого залежить від платформи, хоча максимум, як правило, ~1.8e308 з точністю близько 14 десяткових цифр.<br>
+
  
<br>
+
Логічний тип складається рівно з двох логічних значень: '''true''' (істина) і '''false''' (неправда).
===='''Тип array (масив)'''====
+
  
Масив у PHP являє собою впорядковану карту – тип, що перетворює значення в ключі. Цей тип оптимізовано у декількох напрямках, тому ви можете використовувати його як масив, список (вектор), хеш-таблицю (що є реалізацією карти), стек, черга і т.д. Оскільки ви можете мати як значення інший масив PHP, можна також легко емулювати дерева.
+
:False
<br>
+
::false
Задати масив можна за допомогою конструкції array() або безпосередньо задаючи значення його елементам.
+
::null
Визначення за допомогою '''array()'''<br>
+
::undefined
array ([key] => value,[key1] => value1, ... )
+
::“”
<br>
+
::0
Мовна конструкція array() приймає як параметри пари ключ => значення, розділені комами. Символ => встановлює відповідність між значенням і його ключем. Ключ може бути як цілим числом, так і рядком, а значення може бути будь-якого ніснуючого в PHP типу. Числовий ключ масиву часто називають індексом. Індексування масиву в PHP починається з нуля. Значення елемента масиву можна одержати, вказавши після імені масиву в квадратних дужках ключ шуканого елемента. Якщо ключ масиву являє собою стандартний запис цілого числа, то він розглядається як число, в противному випадку – як рядок. Тому запис $a["1"] рівносильний запису $a[1], так само як і $a["-1"] рівносильне $a[-1].<br>
+
::Number.NaN
<?php
+
:True все інше
$books = array ("php" =>"PHP users guide",12 => true);
+
::“0”
echo $books["php"];
+
::“false”
//виведе "PHP users guide"
+
echo $books[12];    //виведе 1
+
?>
+
<br>
+
Якщо для елемента ключ не заданий, то в якості ключа береться максимальний числовий ключ, збільшений на одиницю. Якщо вказати ключ, якому вже було присвоєно якесь значення, то воно буде перезаписано. Починаючи з PHP 4.3.0, якщо максимальний ключ від’ємне число, то наступним ключем масиву буде нуль (0). <br>
+
<?php
+
// масиви $arr і $arr1 еквіваленти
+
$arr = array(5 => 43, 32, 56, "b" => 12);
+
$arr1 = array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
+
?>
+
<br>
+
Якщо використовувати як ключ TRUE або FALSE, то його значення переводиться відповідно в одиницю і нуль типу integer. Якщо використовувати NULL, то замість ключа одержимо порожню стрічку. Можна використовувати і сам порожню стрічку як ключ, при цьому її треба брати в лапки. Так що це не те ж саме, що використання порожніх квадратних дужок. Не можна використовувати як ключ масиви й об'єкти.
+
Визначення за допомогою синтаксису квадратних дужок
+
<br>
+
Створити масив можна, просто записуючи в нього значення. Як ми вже говорили, значення елемента масиву можна одержати за допомогою квадратних дужок, всередині яких потрібно вказати його ключ наприклад, $book["php"]. Якщо вказати новий ключ і нове значення наприклад, $book["new_key"]="new_value", то в масив додасться новий елемент. Якщо ми не вкажемо ключ, а тільки привласнимо значення $book[]="new_value", то новий елемент масиву буде мати числовий ключ, на одиницю більший максимального існуючого. Якщо масив, у який ми додаємо значення, ще не існує, то він буде створений. <br>
+
<?
+
$books["key"]= value; // додали в масив
+
                      // $books значення
+
                      // value із ключем key
+
$books[] = value1; /* додали в масив
+
                      значення value1 з
+
                      ключем 13, оскільки
+
                      максимальний ключ у
+
                      ми був 12 */
+
?>
+
<br>
+
Для того щоб змінити конкретний елемент масиву, потрібно просто присвоїти йому з його ключем нове значення. Змінити ключ елемента не можна, можна тільки знищити елемент (пару ключ/значення) і додати нову. Щоб видалити елемент масиву, потрібно використовувати функцію '''unset()'''.<br>
+
<?php
+
$books = array ("php" =>"PHP users guide",12 => true);
+
$books[] ="Book about Perl"; // додали елемент
+
                    // з ключем (індексом)
+
                    // 13 це еквівалентно
+
                    // $books[13] =
+
                  // "Book about Perl";
+
$books["lisp"] =123456; /* Це додає до масиву новий
+
            елемент із ключем "lisp" і
+
            значенням 123456 */
+
unset($books[12]); // Це видаляє елемент
+
                  // c ключем 12 з масиву
+
unset ($books); // видаляє масив цілком
+
?>
+
<br>
+
Помітимо, що, коли використовуються порожні квадратні дужки, максимальний числовий ключ шукається серед ключів, що існують у масиві з моменту останнього переіндексування. Переіндексувати масив можна за допомогою функції''' array_values()'''. <br>
+
<?php
+
$arr =array ("a","b","c");
+
  /* Створюємо масив зі значеннями "a", "b" і "c".
+
      Оскільки ключі не зазначені, вони будуть
+
            0,1,2 відповідно */
+
print_r($arr); // виводимо масив (і ключі, і значення)
+
unset($arr[0]);
+
unset($arr[1]);
+
unset($arr[2]);
+
        // знищуємо з нього всі значення
+
print_r($arr);  // виводимо масив (і ключі, і значення)
+
$arr[] = "aa";  // додаємо новий елемент
+
                // у масив.
+
                // Його індексом (ключем)
+
                // буде 3, а не 0
+
print_r($arr);
+
$arr =array_values($arr); // переіндексуємо масив
+
$arr[] = "bb"; // ключем цього елемента буде 1
+
print_r($arr);
+
?>
+
  
Результатом роботи цього скрипта буде: <br>
+
Щоб привести значення до булевого - використовується або явна вказівка типу: Boolean (a), або подвійне заперечення:!! а
  Array ( [0] => a [1] => b [2] => c )
+
  Boolean(a) == !!a
Array ( )  
+
 
  Array ( [3] => aa )  
+
==Тип Object (об'єктний)==
  Array ( [0] => aa [1] => bb )  
+
Значення цього типу є об'єкти. Число властивостей необмежено, можна визначати нові властивості або ж використовувати перевизначені. Властивості мають свою назву і значення. Доступ до властивостей об'єкта здійснюється за допомогою символу крапка (.). Наприклад, в наступному записі властивості name об'єкта person присвоюється значення Vasya:
<br>
+
  person.name = "Vasya";
 +
Об'єкти створюються за допомогою оператора new:
 +
var person = new Object();
 +
Існує ряд зумовлених об'єктів. Можна створити новий об'єкт, який володіє (наследує) властивості вже існуючого об'єкта таким чином (на прикладі об'єкта Date):
 +
  var today = new Date();
 +
 
 +
==Тип Undefined (невизначений)==
 +
Цей тип складається з одного значення undefined. Це значення, яке приймає змінна, яка оголошена в програмі, але якій ще не присвоєно ніякого значення.
  
 +
==Тип Null (нульовий)==
 +
Складається з одного значення null. Це значення означає нульове, порожнє або неіснуюче посилання.
  
=== '''Перетворення типів''' ===
+
=='''Перетворення типів'''==
<br>
+
 
Тип змінної залежить від того, який тип інформації в ній зберігається. Javascript не є жорстко типізованим мовою. Це означає, що ви не повинні точно визначати тип даних змінної, у момент її створення. Тип змінної привласнюється змінної автоматично протягом виконання скрипта. Так, наприклад, ви можете визначити змінну в такий спосіб: <br>
+
Тип змінної залежить від того, який тип інформації в ній зберігається. JavaScript - слаботипізована мова. Це означає, що в декларації змінної не вказується його тип і надалі можна надавати їй значення будь-яких типів. Виконуюча система JavaScript сама виконує автоматичне перетворення типів даних у міру необхідності. Для явного перетворення типів використовуються методи Boolean, Number, Object і String. <br>
 +
<br>Тип змінної привласнюється змінній автоматично протягом виконання скрипта. Так, наприклад, ви можете визначити змінну в такий спосіб:
 
  var answer=42
 
  var answer=42
<br>
+
А пізніше, ви можете привласнити тій же змінній значення, що наприклад випливає:
А пізніше, ви можете привласнити тієї ж змінн значення, що наприклад випливає:  
+
 
  answer="Thanks for all the fish..."  
 
  answer="Thanks for all the fish..."  
<br>
+
Або розглянемо наступне вираження:
Або розглянемо наступне вираження:  
+
//приклад
<br>
+
 
  var onestring="1"
 
  var onestring="1"
 
  var oneint=1
 
  var oneint=1
Рядок 200: Рядок 158:
 
  var oneaddition=oneint+onestring
 
  var oneaddition=oneint+onestring
 
  // У результаті виходить 2  
 
  // У результаті виходить 2  
<br>
+
У першій операції додавання перший операнд є рядком. Javascript припускає, що проводиться операція із двома рядками. Коли Javascript виявляє в якості другого операнда ціле число, він у відповідності зі своїми виставами перетворить змінну в рядок.
У першій операції додавання перший операнд є рядком. Javascript припускає, що проводиться операція із двома рядками. Коли Javascript виявляє в якості другого операнда ціле число, він у відповідності зі своїми виставами перетворить змінну в рядок.  
+
 
<br>
+
Оскільки Javascript вільно типізований мова, то це не викличе помилки.
Оскільки Javascript вільно типізований мова, те це не викличе помилки.  
+
 
<br>
+
Тому що Javascript не підтримує ніяких методів і властивостей для визначення типу поточного значення змінної, дуже важливо уважно відстежувати типи змінних щоб уникнути несподіваних результатів.
Тому що Javascript не підтримує ніяких методів і властивостей для визначення типу поточного значення змінної, дуже важливо внимательноотслеживать типи змінних щоб уникнути несподіваних результатів.  
+
 
<br>
+
Взагалі, у вираженнях строкові значення, що включають числові Javascript перетворює числові значення в строкові. Наприклад, розглянемо наступні твердження:
Взагалі, у вираженнях строкові значення, що включають числові й, Javascript перетворює числові значення в строкові. Наприклад, розглянемо наступні твердження: <br>
+
 
  x="The answer is " + 42
 
  x="The answer is " + 42
 
  y=42 + " is the answer."
 
  y=42 + " is the answer."
<br>
+
Перше твердження буде рядок "The answer is - 42 ". Друге твердження повертає рядок " 42 - The answer is".
Перше твердження буде рядок "The answer is - 42 ".
+
Друге твердження повертає рядок " 42 - The answer is".  
+
  
 
Javascript надає кілька спеціальних функцій для керування строковими й числовими значеннями:  
 
Javascript надає кілька спеціальних функцій для керування строковими й числовими значеннями:  
eval обчислює рядок, що представляє будь-які Javascript літерали або змінні, перетворюючи її в число. <br>
+
# eval обчислює рядок, що представляє будь-які Javascript літерали або змінні, перетворюючи її в число.  
parseint перетворює рядок у ціле число в зазначеній підставі системи числення, якщо можливо.  
+
# parseint перетворює рядок у ціле число в зазначеній підставі системи числення, якщо можливо.  
parsefloat перетворює рядок у число із плаваючою крапкою, якщо можливо.<br>
+
# parsefloat перетворює рядок у число із плаваючою крапкою, якщо можливо.
<br>
+
<br>
+
JavaScript - ''слаботипізованнa мовa''. Це означає, що в декларації змінної ми не вказуємо її тип і надалі можемо привласнювати їй значення будь-яких типів. Виконуюча система JavaScript сама виконує автоматичне перетворення типів даних в міру необхідності. Для явного перетворення типів використовуються методи Boolean, Number, Object та String.
+
 
+
<strong>Приведение типов</strong>
+
<p>Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной. Пример:</P>
+
<CODE><SPAN style="COLOR: #000000"><SPAN
+
style="COLOR: #0000bb">&lt;?php<BR>
+
$foo </SPAN><SPAN
+
style="COLOR: #007700">= </SPAN><SPAN style="COLOR: #0000bb">10</SPAN><SPAN
+
style="COLOR: #007700">;  </SPAN><SPAN
+
style="COLOR: #ff8000">// $foo это целое число<BR>
+
</SPAN><SPAN
+
style="COLOR: #0000bb">$bar </SPAN><SPAN
+
style="COLOR: #007700">= (boolean) </SPAN><SPAN
+
style="COLOR: #0000bb">$foo</SPAN><SPAN style="COLOR: #007700">;  </SPAN><SPAN
+
style="COLOR: #ff8000">// $bar это булев тип<BR>
+
</SPAN><SPAN
+
style="COLOR: #0000bb">?&gt;</SPAN></SPAN></CODE>
+
<p>Допускаются следующие приведения типов:</P>
+
<UL>
+
  <LI>
+
    <p>(int), (integer) - приведение к целому числу</P>
+
 
+
  <LI>
+
    <p>(bool), (boolean) - приведение к булеву типу</P>
+
  <LI>
+
    <p>(float), (double), (real) - приведение к числу с плавающей точкой (float)</P>
+
  <LI>
+
    <p>(string) - приведение к строке</P>
+
  <LI>
+
 
+
    <p>(array) - приведение к массиву</P>
+
  <LI>
+
    <p>(object) - приведение к объекту</P>
+
  </LI>
+
</UL>
+
 
+
<p>Обратите внимание, что внутри скобок допускаются пробелы и символы табуляции, поэтому следующее равносильно по своему действию:</P>
+
 
+
<SPAN style="COLOR: #000000"><SPAN
+
style="COLOR: #0000bb">&lt;?php<BR>
+
$foo </SPAN><SPAN
+
style="COLOR: #007700">= (int) </SPAN><SPAN
+
style="COLOR: #0000bb">$bar</SPAN><SPAN style="COLOR: #007700">;<BR>
+
</SPAN><SPAN
+
style="COLOR: #0000bb">$foo </SPAN><SPAN
+
style="COLOR: #007700">= ( int ) </SPAN><SPAN
+
style="COLOR: #0000bb">$bar</SPAN><SPAN style="COLOR: #007700">;<BR>
+
</SPAN><SPAN
+
style="COLOR: #0000bb">?&gt;</SPAN></SPAN>
+
 
+
<p>Совет: вместо приведения переменной к строке, вы можете заключить ее в двойные кавычки.</p>
+
 
+
<SPAN style="COLOR: #000000"><SPAN
+
style="COLOR: #0000bb">&lt;?php<BR>
+
$foo </SPAN><SPAN
+
style="COLOR: #007700">= </SPAN><SPAN style="COLOR: #0000bb">10</SPAN><SPAN
+
style="COLOR: #007700">;            </SPAN><SPAN
+
style="COLOR: #ff8000">// $foo это целое число<BR>
+
</SPAN><SPAN
+
style="COLOR: #0000bb">$str </SPAN><SPAN style="COLOR: #007700">= </SPAN><SPAN
+
style="COLOR: #dd0000">"$foo"</SPAN><SPAN
+
style="COLOR: #007700">;        </SPAN><SPAN
+
style="COLOR: #ff8000">// $str это строка<BR>
+
</SPAN><SPAN
+
style="COLOR: #0000bb">$fst </SPAN><SPAN
+
style="COLOR: #007700">= (string) </SPAN><SPAN
+
style="COLOR: #0000bb">$foo</SPAN><SPAN style="COLOR: #007700">; </SPAN><SPAN
+
style="COLOR: #ff8000">// $fst это также строка<BR>
+
<BR>
+
  // Это напечатает "они одинаковы"<BR>
+
  </SPAN><SPAN
+
style="COLOR: #007700">if (</SPAN><SPAN style="COLOR: #0000bb">$fst </SPAN><SPAN
+
style="COLOR: #007700">=== </SPAN><SPAN style="COLOR: #0000bb">$str</SPAN><SPAN
+
style="COLOR: #007700">) {<BR>
+
echo </SPAN><SPAN
+
style="COLOR: #dd0000">"они одинаковы"</SPAN><SPAN
+
style="COLOR: #007700">;<BR>
+
}<BR>
+
?>
+
 
+
Перетворення типів відбуваються за наступними правилами.
+
 
+
==== '''Перетворення до логічного типу''' ====
+
 
+
<div style="margin-left: 3em; margin-top: 1em; margin-bottom: 2em">
+
        <table border="1" cellpadding="5" cellspacing="0">
+
          <tr>
+
            <th>Вихідний тип</th>
+
 
+
            <th>Результат</th>
+
          </tr>
+
          <tr>
+
            <td>Undefined</td>
+
            <td><strong>false</strong></td>
+
          </tr>
+
 
+
          <tr>
+
            <td>Null</td>
+
            <td><strong>false</strong></td>
+
          </tr>
+
          <tr>
+
            <td>Boolean</td>
+
            <td>без змін</td>
+
          </tr>
+
 
+
          <tr>
+
            <td>Number</td>
+
            <td><strong>false</strong>, якщо аргумент рівен <strong>+0</strong>, <strong>-0</strong>
+
              або <strong>NaN</strong>; <strong>true</strong> в інших випадках</td>
+
 
+
          </tr>
+
          <tr>
+
            <td>String</td>
+
            <td><strong>false</strong>, якщо аргумент&nbsp;&#151; порожній рядок; <strong>true</strong>
+
              в інших випадках</td>
+
 
+
          </tr>
+
          <tr>
+
            <td>Object</td>
+
            <td><strong>true</strong></td>
+
          </tr>
+
        </table>
+
      </div>
+
 
+
<strong>[[Перетворення до логічного типу в JavaScript]]</strong>
+
 
+
 
+
==== '''Перетворення до числового типу''' ====
+
 
+
<div style="margin-left: 3em; margin-top: 1em; margin-bottom: 2em">
+
        <table border="1" cellpadding="5" cellspacing="0">
+
          <tr>
+
            <th>Вихідний тип</th>
+
            <th>Результат</th>
+
          </tr>
+
 
+
          <tr>
+
            <td>Undefined</td>
+
            <td><strong>NaN</strong></td>
+
          </tr>
+
          <tr>
+
            <td>Null</td>
+
            <td><strong>+0</strong></td>
+
 
+
          </tr>
+
          <tr>
+
            <td>Boolean</td>
+
            <td><strong>1</strong>, якщо аргумент рівен <strong>true</strong>, і <strong>0</strong>,
+
              якщо аргумент рівен <strong>false</strong></td>
+
          </tr>
+
 
+
          <tr>
+
            <td>Number</td>
+
            <td>без змін</td>
+
          </tr>
+
          <tr>
+
            <td>String</td>
+
            <td>якщо рядок містить правильне число (можливо з пробілами перед та / або після нього),
+
              то це число; <strong>NaN</strong> в іншому випадку</td>
+
 
+
          </tr>
+
          <tr>
+
            <td>Object</td>
+
            <td>результат перетворення значення об'єкта за замовчуванням</td>
+
          </tr>
+
        </table>
+
      </div>
+
 
+
==== '''Перетворення до рядкового типу''' ====
+
 
+
<div style="margin-left: 3em; margin-top: 1em; margin-bottom: 2em">
+
        <table border="1" cellpadding="5" cellspacing="0">
+
          <tr>
+
            <th>Вихідний тип</th>
+
            <th>Результат</th>
+
          </tr>
+
 
+
          <tr>
+
            <td>Undefined</td>
+
            <td><tt>&quot;undefined&quot;</tt></td>
+
          </tr>
+
          <tr>
+
            <td>Null</td>
+
            <td><tt>&quot;null&quot;</tt></td>
+
 
+
          </tr>
+
          <tr>
+
            <td>Boolean</td>
+
            <td><tt>&quot;true&quot;</tt>, якщо аргумент рівен <strong>true</strong>, і <tt>&quot;false&quot;</tt>,
+
              якщо аргумент рівен <strong>false</strong></td>
+
          </tr>
+
 
+
          <tr>
+
            <td>Number</td>
+
            <td>текстове представлення числа (див. нижче)</td>
+
          </tr>
+
          <tr>
+
            <td>String</td>
+
            <td>без змін</td>
+
 
+
          </tr>
+
          <tr>
+
            <td>Object</td>
+
            <td>результат перетворення значення об'єкта за замовчуванням</td>
+
          </tr>
+
        </table>
+
      </div>
+
 
+
Перетворення числа ''n'' у рядок відбувається за такими правилами:
+
 
+
<ul>
+
        <li>якщо <em>n</em> рівне <strong>NaN</strong>, то результат <strong>&quot;NaN&quot;</strong>;</li>
+
 
+
        <li>якщо <em>n</em> рівне <strong>+0</strong> або <strong>-0</strong>, то результат <strong>&quot;0&quot;</strong>;</li>
+
        <li>якщо <em>n</em> відємне, то результат буде конкатенацією рядка <strong>&quot;-&quot;</strong>
+
 
+
          і результату перетворення в рядок числа <em>-n</em>;</li>
+
        <li>якщо <em>n</em> рівне некінченності, то результат <strong>&quot;Infinity&quot;</strong>;</li>
+
        <li>в інших випадках нехай <em>m</em>, <em>k</em> и <em>s</em>&nbsp;&#151; такі цілі числа,
+
          що <em>k</em>&nbsp;&gt;=&nbsp;1, 10<sup><em>k</em>-1</sup>&nbsp;&lt;=&nbsp;<em>s</em>&nbsp;&lt;&nbsp;10<sup><em>k</em></sup>,
+
          <em>n</em> рівне <em>s</em>&nbsp;x&nbsp;10<sup><em>m</em>-<em>k</em></sup> и <em>k</em>&nbsp;&#151;
+
 
+
          найменьше з можливих. Відмітемо, що <em>k</em>&nbsp;&#151; це кількість цифр у десятковому
+
          представленні <em>s </em>, що <em>s</em> не діляться на 10 і що найменш значуща цифра <em>s</em>
+
          може не бути однозначно визначеною. Тоді</li>
+
        <li>якщо <em>k</em> &lt;= <em>m</em> &lt;= 21, то результат складається з <em>k</em> десятичних
+
          цифр <em>s</em> (без провідних нулів), за якими йдуть <em>m</em>-<em>k</em> символів <strong>'0'</strong>;</li>
+
 
+
        <li>інакше, якщо 0 &lt; <em>m</em> &lt;= 21, то результат складається з <em>m</em> старших десяткових
+
          цифр <em>s</em>, за якими слідує десяткова точка <strong>'.'</strong> і <em>k</em>-<em>m</em>
+
 
+
          залишившихся десяткових цифр <em>s</em>;</li>
+
        <li>інакше, якщо -6 &lt; <em>m</em> &lt;= 0, то результат складається з символа <strong>'0'</strong>,
+
          за якими слідує десяткова точка <strong>'.'</strong>, -<em>m</em> символів <strong>'0'</strong>
+
 
+
          і <em>k</em> десяткових цифр <em>s</em>;</li>
+
        <li>інакше, якщо <em>k</em> = 1, то результат складається з єдиною цифри <em>s</em>, символа
+
          <strong>'e'</strong>, символа плюс <strong>'+'</strong> або мінус <strong>'-'</strong> в залежності
+
          від того, додатнє чи відємне <em>m</em>-1, за якими слідує десяткове представлення
+
          числа abs(<em>m</em>-1);</li>
+
 
+
        <li>інакше результат складається з старшої десяткового цифри <em>s</em>, за якою слідує десяткова
+
          точка <strong>'.'</strong> и <em>k</em>-1 залишившихся десяткових цифр <em>s</em>, символ <strong>'e'</strong>,
+
          символ плюс <strong>'+'</strong> або мінус <strong>'-'</strong> в залежності
+
          від того, додатнє чи відємне <em>m</em>-1, за якими слідує десяткове представлення
+
          числа abs(<em>m</em>-1).</li>
+
 
+
      </ul>
+
 
+
<strong>[[Перетворення до рядкового типу в JavaScript]]</strong>
+
 
+
 
+
==== '''Перетворення до об'єктного типу''' ====
+
 
+
<div style="margin-left: 3em; margin-top: 1em; margin-bottom: 2em">
+
        <table border="1" cellpadding="5" cellspacing="0">
+
          <tr>
+
            <th>Вихідний тип тип</th>
+
            <th>Результат</th>
+
 
+
          </tr>
+
          <tr>
+
            <td>Undefined</td>
+
            <td>генерується виключення <strong>TypeError</strong></td>
+
          </tr>
+
          <tr>
+
            <td>Null</td>
+
 
+
            <td>генерується виключення <strong>TypeError</strong></td>
+
          </tr>
+
          <tr>
+
            <td>Boolean</td>
+
            <td>новий логічний об'єкт з даними значенням за замовчуванням</td>
+
          </tr>
+
          <tr>
+
 
+
            <td>Number</td>
+
            <td>новий логічний об'єкт з даними значенням за замовчуванням</td>
+
          </tr>
+
          <tr>
+
            <td>String</td>
+
            <td>новий рядковий об'єкт з даними значенням за замовчуванням</td>
+
          </tr>
+
 
+
          <tr>
+
            <td>Object</td>
+
            <td>без змін</td>
+
          </tr>
+
        </table>
+
      </div>
+
+
 
+
==== '''Приклади неявних перетворень''' ====
+
 
+
У виразах, що з'єднують числові і рядкові значення операцією +, JavaScript перетворює числа в рядки, наприклад:
+
 
+
<div class="code">
+
<pre class="code">x = &quot;Відповідь дорівнює &quot; + 21  // повертає &quot;Відповідь дорівнює 21&quot;
+
y = 21 + &quot;  - ось відповідь&quot; // повертає &quot;21 - ось відповідь&quot;</pre>
+
 
+
      </div>
+
 
+
      <p>В інших випадках JavaScript намагається перетворити рядок в число, наприклад:</p>
+
 
+
      <div class="code">
+
<pre class="code">a = &quot;21&quot; - 1 // повертає 20
+
b = &quot;21&quot; + 1 // повертає 211</pre>
+
 
+
      </div>
+
 
+
== Змінні ==
+
 
+
 
+
Ви використовуєте змінні, щоб зберігати значення у вашому додатку. Ви даєте цим змінним імена, по яких ви посилаєтеся на них, і існують деякі правила, яким імена повинні відповідати. <br>
+
 
+
Ідентифікатор Javascript або ім'я повинні початися із символу або символом підкреслення ("_"); послідовність символів також можуть бути цифри '''(0-9)'''. Символи включають знаки з '''"A"''' до '''"Z"''' (верхнього регістру) і знаки з '''"a"''' до '''"z"''' (нижній регістр). Javascript ураховує регістр.<br>
+
<br>
+
'''Деякі приклади припустимих імен:'''
+
 
+
Number_hits
+
temp99
+
_name
+
<br>
+
'''Область дії змінних'''
+
<br>
+
Область дії змінних - те, де ви можете використовувати їх у скрипте. В Javascript, існує дві області дії, які змінні можуть мати:
+
<br>
+
'''Глобальна:''' Ви можете використовувати змінну де-небудь у додатку.
+
'''Локальна:''' Ви можете використовувати змінну усередині поточної функції.
+
<br>
+
Щоб оголосити локальну змінну усередині функція, використовуйте ключове слово var,
+
<br>наприклад:
+
var total=0;
+
 
+
Щоб оголосити глобальну змінну, оголосите змінну призначення, яка просто привласнює значення змінної (або у функції або поза функцією),
+
<br>наприклад:
+
total=0;
+
 
+
Найкраще повідомляти глобальні змінні на початку вашого скрипта, так, щоб функції успадковували змінну і її значення.
+
 
+
'''Літерали'''
+
 
+
Літерали - спосіб, яким ви представляєте значення в Javascript. Установлені значення, які ви буквально (literally) представляєте у вашому джерелі, і - не змінні.
+
<br>Приклади літералів включають:
+
 
+
42
+
3.14159
+
"Бути або не бути"
+
 
+
'''Цілі числа (Integers)'''
+
<br>
+
Цілими називають числа виду 1, 164, 102390. Вони можуть бути виражені в десятковому ( по підставі 10), шестнадцатеричном ( по підставі 16), або восьмеричному ( по підставі 8) виставі. Десятковий літерал цілого числа складається з послідовності цифр без уведення 0 (нуля).
+
<br>
+
Ціле число може бути виражене у восьмеричному або шестнадцатеричном скоріше чому в десятиричное. Шестнацетеричные числа включають цифри 0-9 і букви a-f і A-F, в Javascript вони записуються з комбінацією символів 0x або 0X (нуль-x) перед числом. Восмиричные числа включають тільки цифри 0-7 і в Javascript записуються із провідного нуля.
+
<br>
+
Наприклад:<br>
+
десяткове число 23 представляється в шестнадцатеричном виді як 0x17 і у восмеричном як   
+
027
+
 
+
'''Літерали із плаваючою крапкою'''
+
 
+
Літерали із плаваючою крапкою являють собою дробові частини цілих чисел і повинні містити в собі принаймні одну цифру й десяткову крапку або символ експоненти '''("е" або "Е")'''. У наступних прикладах наведені різні варіанти вистави того самого числа:
+
 
+
3.1415927
+
31415927е-7
+
.31415927Е1
+
 
+
'''Логічні літерали'''
+
<br>
+
Логічні значення мають тільки два значення, дійсна (true) або неправда (false). У деяких реалізаціях мови Javascript 0 (false) і 1 (true) не можуть бути використані в якості логічних значень.
+
<br>
+
'''Рядка'''
+
<br>
+
Строкові літерали - нуль або більша кількість знаків, располеженные в подвійні (") або одинарних (') лапках. Рядки повинен бути розділені лапками того ж самого типу; тобто або обидві одинарні лапки або подвійні лапки. Використання зворотної подвійної риси "" дозволяє вставляти в рядок спеціальні символи. Приведемо приклади строкових літералів:
+
 
+
"Blah"
+
'Blah'
+
"1234"
+
"one line another line"
+
 
+
'''Спеціальні символи'''
+
 
+
Ви можете використовувати наступні спеціальні символи в строкових литаралах Javascript:
+
 
+
вказує повернення на один символ.
+
f вказує переклад сторінки.
+
вказує нову цифру(знак) лінії.
+
вказує повернення каретки.
+
вказує cимвол табуляції.
+
<br>
+
'''Символи виходу'''
+
<br>
+
Ви можете вставляти лапок усередині рядка, передуючи їм похилою рисою вліво. Це відомо як вихід лапок.
+
<br>Наприклад
+
document.write("" Вам слід прийняти ванну",- сказав доктор і наморщив ніс.");
+
 
+
''' виводить
+
" Вам слід прийняти ванну",
+
- сказав доктор і наморщив ніс'''
+
 
+
 
+
 
+
=== Декларація змінних ===
+
 
+
<p><em>Змінні</em> використовуються в якості символічних імен, які приймають
+
        різні значення. Імена змінних задаються ідентифікаторами. Змінна
+
        створюється в момент її декларації. JavaScript дозволяє декларувати змінну двома способами:</p>
+
<ul>
+
        <li>За допомогою ключового слова <strong>var</strong>, наприклад, <code>var x;</code> або <code>var
+
          x = 21;</code>.</li>
+
 
+
        <li>Просто присвоюванням змінній значення, наприклад <code>x = 21;</code>.</li>
+
      </ul>
+
 
+
      <p>Якщо декларація змінної не містить присвоювання їй значення, то її значенням вважається
+
        <strong>undefined</strong>. Ми можемо перевіряти, визначено Чи має значення змінної, і вживати
+
        відповідні дії. Приклад:</p>
+
<font color="#008000"><div class="code">
+
<pre class="code">var text;
+
if (text == undefined)
+
  document.write(&quot;Текст не задан&quot;);
+
else
+
  document.write(&quot;Текст:&quot; + text);</pre>
+
 
+
      </div></font>
+
 
+
      <p>В этом примере значение переменной <dfn>text</dfn> не определено, поэтому будет выполнен первый
+
        оператор <dfn>document.write</dfn>.</p>
+
 
+
      <p>В самом общем виде декларация переменных имеет вид:</p>
+
 
+
<font color="#008000">var идентификатор[=инициализатор]?[,идентификатор[=инициализатор]?]?</font>
+
 
+
      <p>Здесь <em>инициализатор</em>&nbsp;&#151; это любое выражение, значение которого присваивается
+
        переменной при ее создании. Пример:</p>
+
 
+
      <font color="#blue"><div class="code">
+
<pre class="code">var a = 0, b, c = &quot;текст&quot;, x, y = false;</pre>
+
      </div></font>
+
 
+
=== Область действия переменных ===
+
 
+
      <p>Область действия переменной определяется положением ее декларации в тексте программы. Существуют
+
        три типа исполняемого кода JavaScript, называемых <em>контекстом исполнения</em>:</p>
+
<ul>
+
        <li><em>Глобальный контекст</em>, т.&nbsp;е. исходный текст сценариев, не включая тела функций.</li>
+
 
+
        <li><em>Локальный контекст</em>, т.&nbsp;е. исходный текст сценариев, являющийся телом функции,
+
          а также аргумент конструктора встроенного объекта <strong>Function</strong>.
+
          Точнее говоря, если последним параметром конструктора <strong>Function</strong>
+
          является строка текста, то она интерпретируется как тело функции.</li>
+
        <li><em>Eval-контекст</em>, т.&nbsp;е. аргумент метода <strong>eval</strong>.
+
          Если параметром метода <strong>eval</strong> является строка
+
          текста, то она интерпретируется как программа на языке JavaScript, имеющая тот же контекст,
+
          в котором был вызван этот метод.</li>
+
 
+
      </ul>
+
 
+
<p>Иными словами, любая переменная, декларированная вне тела всех функций, является <em>глобальной</em>
+
        и доступна всюду в тексте данной программы. Переменная, декларированная в теле функции, является
+
        <em>локальной</em> и доступна только внутри тела этой функции. Об особенностях eval-контекста
+
        см. описание метода <strong>eval</strong>.</p>
+
 
+
      <p>Для декларации глобальных переменных ключевое слово <strong>var</strong> не обязательно. Однако,
+
        оно обязательно при декларации локальных переменных.</p>
+
 
+
 
+
[[Інтернет-програмування]]
+

Поточна версія на 11:18, 9 жовтня 2016

Змінні

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

Оголошення змінної

Оголосити змінну у JavaScript можна при допомозі ключового слова var, таким чином:

var назва змінної

Тип змінної JavaScript надає лише при наданні змінній певної величини. Після такого надання назва змінної стане доступною, навіть якщо її попередньо не було оголошено.
Назва змінної:

  • має починатися начинаться з літери латиниці або символів "_" чи "$", містити лише літери латиниці, цифри і символи "_" та "$";
  • не може збігатися з жодним з таких зарезервованих слів JavaScript:

Spisok slov.JPG

Надання змінним величини здійснюють за допомогою оператора "=". Наприклад, оголошення змінної і надання їй величини текстового рядка можна здійснити так:

var Hello;
Hello = "Привіт!";

При цьому у довільному місці програми змінній Hello можна надати числельну величину, наприклад, так:

Hello = 4;

Після здійснення такої операції тип змінної буде змінено, але у процесі інтерпретації сценарію не буде зроблено жодного попереджувального повідомлення. Змінній можна надати спеціальну величину null. У цьому випадку змінній не призначено жоден з типів.

Тип число допускає використання різних форматів, наприклад,:

25 — запис цілого числа у десятковій системі числення;
0137 — запис цілого числа у вісімковій системі числення;
0xFF — запис цілого числа у шістнадцятковій системі числення;
386.7 — запис дійсного числа с плавающей десятковою крапкою;
25e5 або 25E5 — запис дійсного числа в науковій нотації, дорівнює 25 ∙ 105.

Якщо результат виконання операцій з числами не можна подати числом, то повертається величина NaN (від англійською Not a Number).
Тип текстовий рядок описує послідовність символів між лапками (' або ", але одного вигляду). Слід зауважити, порожній рядок відмінний від null.
Тип логічних даних передбачає лише дві величини: true і false.
Якщо змінну було оголошено, але їй не було надано величини, вона має невизначений тип.
Якщо у виразах зустрічаються змінні різних типів, інтерпретатор JavaScript може автоматично перетворити числові дані в рядки тексту. Перетворення рядка у число виконують лише з допомогою спеціальних функцій parseInt (у ціле) і parseFloat (у дійсне).

Типи даних

Мова JavaScript містить шість типів даних: Undefined (непроникний), Null (нульовий), Boolean (логічний), String (рядковий), Number (числовий) і Object (об'єктний). Це відносно незначна кількість типів дозволяє, тим не менше, створювати повноцінні сценарії для виконання багатьох функцій.

Базові типи - це String (рядковий), Number (числовий) і Boolean (логічний).

У Javascript є і об'єктні типи даних і елементарні, які можна інтерпретувати як об'єкти.


Типы данных JS.JPG


Елементарні - створюються простою вказівкою даних:

var orange = "Апельсин"

Об'єктні - наприклад, через оператор new:

var orange = new String("Апельсин")

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

var ok = new Boolean(true) // не треба

Елементарні типи автоматично інтерпретуються як об'єкти при викликах методів, тому можна, визначати довжину рядка як:

alert("Апельсин".length)

Тому іноді кажуть, що в javascript - всі об'єкти. Так зручно думати, але певна різниця все ж є.
Наприклад, typeof видасть різний результат:

alert(typeof "test")
Результат 1.JPG
alert(typeof new String("test"))
Результат 2.JPG


Це - ще одна причина уникати використання об'єктів там, де існує елементарний тип: менше плутанини.

Перетворення типу можна явним чином зробити через його назву:

var test = Boolean("something") // true

Крім усім відомих типів даних - в javascript є спеціальне значення undefined, яке, умовно кажучи, позначає що "даних немає". Не null, а даних немає. Розумійте як хочете.

Тип Number (числовий)

Цей тип має формат з плаваючою комою і може задаватись в довільній формі, наприклад, 1.349, 12, .0529,-1.5e10. Запис цілих чисел можлива в вісімковій (починається з O) або шістнадцятковій (починається з Ox) формі. Якщо в ході операцій виникає помилка (наприклад, при діленні на нуль), то змінна отримає значення NaN (not-a-number, що не число).

Всі числа зберігаються у форматі float64, т.е 8 байт з плаваючою крапкою. У цьому форматі не завжди можливі точні обчислення. Наприклад,

alert(0.1+0.2)  // виведе не 0.3!
Результат 3.JPG


Цікаві методи

Округлення до потрібної точності після коми

Для цього використовується метод toFixed.

0.1234.toFixed(2)  = 0.12

Конвертація у число

Стандартно конвертація здійснюється викликом Number (). Можна і простіше: + str.

// еквівалентні записи
var str = "002"
var a = Number(str) // 2
// нечисла перетворюються в NaN
+"0.1"  // => 0.1
+"0.1z" // => Number.NaN

Крім жорсткої конвертації є і більш м'яка фільтрація в число:

// обрізається все після числа
parseFloat("0.1zf") = 0.1
parseInt("08f.4", 10) = 8
// тут числа взагалі немає, тому NaN
parseFloat("smth") = Number.NaN

parseFloat, parseInt переводять зліва направо, поки це можливо. Якщо взагалі неможливо - то NaN.

Другий аргумент parseInt - основа системи числення. Якщо його немає, то система сама намагається вгадати систему числення:

parseInt("0x10") = 16 // т.я 0x означає 16-річну систему
parseInt("010") = 8 // т.я провідний 0 означає 8-річну систему
// якщо хочете без сюрпризів - вказуйте основу явно
parseInt("010",10) = 10

Математика

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

  • Math.floor () / Math.round () / Math.ceil () - округлення
  • Math.abs () - модуль числа
  • Math.sin () і т.д

Тип String (рядковий)

Складається з усіх можливих текстових рядків. Кожен рядок представляє собою упорядкований масив з нуля або більше символів Unicode (тобто 16-бітових цілих чисел без знаку), які називаються частинами рядка. Елементи рядків нумеруються, починаючи з нуля.

  • Лапки подвійні і одинарні працюють однаково
  • Можна вказувати Юнікодні символи через \ uXXXX:
    • "зірочка: \ u002a"
  • Вбудовані регулярні вирази, методи replace / match:
    • "превед медвед". replace (/ (. *?) \ s (. *) /, "$ 2, $ 1!") / / => медвед, превед!

Як це зазвичай і буває, у регулярки символ \ w позначає латинські буквоцифри або підкреслення, але не російські літери.

Довжина рядка зберігається у властивості length.

Тип Boolean (логічний)

У javascript - особливий список значень, які при приведенні до Boolean стають false. Він відрізняється, наприклад, від аналогічного списку в PHP.

Логічний тип складається рівно з двох логічних значень: true (істина) і false (неправда).

False
false
null
undefined
“”
0
Number.NaN
True – все інше
“0”
“false”

Щоб привести значення до булевого - використовується або явна вказівка типу: Boolean (a), або подвійне заперечення:!! а

Boolean(a) == !!a

Тип Object (об'єктний)

Значення цього типу є об'єкти. Число властивостей необмежено, можна визначати нові властивості або ж використовувати перевизначені. Властивості мають свою назву і значення. Доступ до властивостей об'єкта здійснюється за допомогою символу крапка (.). Наприклад, в наступному записі властивості name об'єкта person присвоюється значення Vasya:

person.name = "Vasya";

Об'єкти створюються за допомогою оператора new:

var person = new Object();

Існує ряд зумовлених об'єктів. Можна створити новий об'єкт, який володіє (наследує) властивості вже існуючого об'єкта таким чином (на прикладі об'єкта Date):

var today = new Date();

Тип Undefined (невизначений)

Цей тип складається з одного значення undefined. Це значення, яке приймає змінна, яка оголошена в програмі, але якій ще не присвоєно ніякого значення.

Тип Null (нульовий)

Складається з одного значення null. Це значення означає нульове, порожнє або неіснуюче посилання.

Перетворення типів

Тип змінної залежить від того, який тип інформації в ній зберігається. JavaScript - слаботипізована мова. Це означає, що в декларації змінної не вказується його тип і надалі можна надавати їй значення будь-яких типів. Виконуюча система JavaScript сама виконує автоматичне перетворення типів даних у міру необхідності. Для явного перетворення типів використовуються методи Boolean, Number, Object і String.

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

var answer=42

А пізніше, ви можете привласнити тій же змінній значення, що наприклад випливає:

answer="Thanks for all the fish..." 

Або розглянемо наступне вираження:

//приклад 
var onestring="1"
var oneint=1
var oneconcatenate=onestring+oneint
// У результаті виходить "11"
var oneaddition=oneint+onestring
// У результаті виходить 2 

У першій операції додавання перший операнд є рядком. Javascript припускає, що проводиться операція із двома рядками. Коли Javascript виявляє в якості другого операнда ціле число, він у відповідності зі своїми виставами перетворить змінну в рядок.

Оскільки Javascript вільно типізований мова, то це не викличе помилки.

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

Взагалі, у вираженнях строкові значення, що включають числові Javascript перетворює числові значення в строкові. Наприклад, розглянемо наступні твердження:

x="The answer is " + 42
y=42 + " is the answer."

Перше твердження буде рядок "The answer is - 42 ". Друге твердження повертає рядок " 42 - The answer is".

Javascript надає кілька спеціальних функцій для керування строковими й числовими значеннями:

  1. eval обчислює рядок, що представляє будь-які Javascript літерали або змінні, перетворюючи її в число.
  2. parseint перетворює рядок у ціле число в зазначеній підставі системи числення, якщо можливо.
  3. parsefloat перетворює рядок у число із плаваючою крапкою, якщо можливо.