Змінні та типи данних в JavaScript
Типи данних
Опис типів даних
Мова JavaScript містить шість типів даних Undefined(невизначений), Null (нульовий), Boolean (логічний), String (строковий), Number (числовий) і Object (об'єктний). Ця відносно невелика кількість типів дозволяє, тим не менше, створювати повноцінні сценарії для виконання багатьох функцій.
Тип Undefined (невизначений)
Цей тип складається з єдиного значення undefined. Це значення, яке приймає змінна, яка оголошена в програмі, але якої ще не присвоєно ніякого значення.
Тип Null (нульовий)
Цей тип складається з єдиного значення null. Це значення означає нульове, порожне або неіснуюче посилання.
Тип Boolean (логічний)
Цей тип складається рівно з двох логічних значень: true (істина) і false (брехня).
Тип String (строковий)
Цей тип складається з усіх можливих текстових рядків. Кожен рядок представляє собою упорядкований масив з нуля або більше символів Unicode (тобто 16-бітових цілих чисел без знака), званих елементами рядка. Елементи рядка нумеруються, починаючи з нуля. Довжина рядка - це кількість елементів в ній; порожній рядок складається з нуля елементів.
Тип Number (числовий)
Цей тип має рівно 18437736874454810627 (тобто 264 - 253 + 3)64-бітовому формату плаваючих чисел подвійної точності IEEE 754 з тим єдиним винятком, що 9007199254740990 (тобто 253 - 2) різних значень "Не число" даного формату представляються в JavaScript одним значенням NaN. Ще два спеціальні значення - це додатня незкінченність і відємна нескінченність яким в JavaScript відповідають вираження + Infinity (або просто Inifinity) і -Infinity. Відзначимо також, що в даному форматі розрізняються позитивний нуль (+0 або 0) і негативний нуль (-0).
Тип Object (об'єктний)
Значенням цього типу є об'єкти. Об'єкт - це невпорядкований набір властивостей
Перетворення типів
JavaScript - слаботипізованнa мовa. Це означає, що в декларації змінної ми не вказуємо її тип і надалі можемо привласнювати їй значення будь-яких типів. Виконуюча система JavaScript сама виконує автоматичне перетворення типів даних в міру необхідності. Для явного перетворення типів використовуються методи Boolean, Number, Object та String.
Приведение типов
Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной. Пример:
<?php
$foo = 10; // $foo это целое число
$bar = (boolean) $foo; // $bar это булев тип
?>
Допускаются следующие приведения типов:
-
(int), (integer) - приведение к целому числу
-
(bool), (boolean) - приведение к булеву типу
-
(float), (double), (real) - приведение к числу с плавающей точкой (float)
-
(string) - приведение к строке
-
(array) - приведение к массиву
-
(object) - приведение к объекту
Обратите внимание, что внутри скобок допускаются пробелы и символы табуляции, поэтому следующее равносильно по своему действию:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Совет: вместо приведения переменной к строке, вы можете заключить ее в двойные кавычки.
<?php
$foo = 10; // $foo это целое число
$str = "$foo"; // $str это строка
$fst = (string) $foo; // $fst это также строка
// Это напечатает "они одинаковы"
if ($fst === $str) {
echo "они одинаковы";
}
?>
Перетворення типів відбуваються за наступними правилами.
Перетворення до логічного типу
Вихідний тип | Результат |
---|---|
Undefined | false |
Null | false |
Boolean | без змін |
Number | false, якщо аргумент рівен +0, -0 або NaN; true в інших випадках |
String | false, якщо аргумент порожній рядок; true в інших випадках |
Object | true |
Перетворення до логічного типу в JavaScript
Перетворення до числового типу
Вихідний тип | Результат |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | 1, якщо аргумент рівен true, і 0, якщо аргумент рівен false |
Number | без змін |
String | якщо рядок містить правильне число (можливо з пробілами перед та / або після нього), то це число; NaN в іншому випадку |
Object | результат перетворення значення об'єкта за замовчуванням |
Перетворення до рядкового типу
Вихідний тип | Результат |
---|---|
Undefined | "undefined" |
Null | "null" |
Boolean | "true", якщо аргумент рівен true, і "false", якщо аргумент рівен false |
Number | текстове представлення числа (див. нижче) |
String | без змін |
Object | результат перетворення значення об'єкта за замовчуванням |
Перетворення числа n у рядок відбувається за такими правилами:
- якщо n рівне NaN, то результат "NaN";
- якщо n рівне +0 або -0, то результат "0";
- якщо n відємне, то результат буде конкатенацією рядка "-" і результату перетворення в рядок числа -n;
- якщо n рівне некінченності, то результат "Infinity";
- в інших випадках нехай m, k и s такі цілі числа, що k >= 1, 10k-1 <= s < 10k, n рівне s x 10m-k и k найменьше з можливих. Відмітемо, що k це кількість цифр у десятковому представленні s , що s не діляться на 10 і що найменш значуща цифра s може не бути однозначно визначеною. Тоді
- якщо k <= m <= 21, то результат складається з k десятичних цифр s (без провідних нулів), за якими йдуть m-k символів '0';
- інакше, якщо 0 < m <= 21, то результат складається з m старших десяткових цифр s, за якими слідує десяткова точка '.' і k-m залишившихся десяткових цифр s;
- інакше, якщо -6 < m <= 0, то результат складається з символа '0', за якими слідує десяткова точка '.', -m символів '0' і k десяткових цифр s;
- інакше, якщо k = 1, то результат складається з єдиною цифри s, символа 'e', символа плюс '+' або мінус '-' в залежності від того, додатнє чи відємне m-1, за якими слідує десяткове представлення числа abs(m-1);
- інакше результат складається з старшої десяткового цифри s, за якою слідує десяткова точка '.' и k-1 залишившихся десяткових цифр s, символ 'e', символ плюс '+' або мінус '-' в залежності від того, додатнє чи відємне m-1, за якими слідує десяткове представлення числа abs(m-1).
Перетворення до рядкового типу в JavaScript
Перетворення до об'єктного типу
Вихідний тип тип | Результат |
---|---|
Undefined | генерується виключення TypeError |
Null | генерується виключення TypeError |
Boolean | новий логічний об'єкт з даними значенням за замовчуванням |
Number | новий логічний об'єкт з даними значенням за замовчуванням |
String | новий рядковий об'єкт з даними значенням за замовчуванням |
Object | без змін |
Приклади неявних перетворень
У виразах, що з'єднують числові і рядкові значення операцією +, JavaScript перетворює числа в рядки, наприклад:
x = "Відповідь дорівнює " + 21 // повертає "Відповідь дорівнює 21" y = 21 + " - ось відповідь" // повертає "21 - ось відповідь"
В інших випадках JavaScript намагається перетворити рядок в число, наприклад:
a = "21" - 1 // повертає 20 b = "21" + 1 // повертає 211
Змінні
Декларація змінних
Змінні використовуються в якості символічних імен, які приймають різні значення. Імена змінних задаються ідентифікаторами. Змінна створюється в момент її декларації. JavaScript дозволяє декларувати змінну двома способами:
- За допомогою ключового слова var, наприклад,
var x;
абоvar x = 21;
. - Просто присвоюванням змінній значення, наприклад
x = 21;
.
Якщо декларація змінної не містить присвоювання їй значення, то її значенням вважається undefined. Ми можемо перевіряти, визначено Чи має значення змінної, і вживати відповідні дії. Приклад:
var text; if (text == undefined) document.write("Текст не задан"); else document.write("Текст:" + text);
В этом примере значение переменной text не определено, поэтому будет выполнен первый оператор document.write.
В самом общем виде декларация переменных имеет вид:
var идентификатор[=инициализатор]?[,идентификатор[=инициализатор]?]?
Здесь инициализатор это любое выражение, значение которого присваивается переменной при ее создании. Пример:
var a = 0, b, c = "текст", x, y = false;
Область действия переменных
Область действия переменной определяется положением ее декларации в тексте программы. Существуют три типа исполняемого кода JavaScript, называемых контекстом исполнения:
- Глобальный контекст, т. е. исходный текст сценариев, не включая тела функций.
- Локальный контекст, т. е. исходный текст сценариев, являющийся телом функции, а также аргумент конструктора встроенного объекта Function. Точнее говоря, если последним параметром конструктора Function является строка текста, то она интерпретируется как тело функции.
- Eval-контекст, т. е. аргумент метода eval. Если параметром метода eval является строка текста, то она интерпретируется как программа на языке JavaScript, имеющая тот же контекст, в котором был вызван этот метод.
Иными словами, любая переменная, декларированная вне тела всех функций, является глобальной и доступна всюду в тексте данной программы. Переменная, декларированная в теле функции, является локальной и доступна только внутри тела этой функции. Об особенностях eval-контекста см. описание метода eval.
Для декларации глобальных переменных ключевое слово var не обязательно. Однако, оно обязательно при декларации локальных переменных.