Відмінності між версіями «Змінні та типи данних в JavaScript»
Рядок 79: | Рядок 79: | ||
</table> | </table> | ||
</div> | </div> | ||
+ | |||
+ | <p><strong>Преобразование в тип Boolean (двоичные данные)</strong></p> | ||
+ | <p>Для несомненного преобразования значения в булев тип используйте приведение типа <var>(bool)</var> или <var>(boolean)</var>. Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует булев аргумент.</p> | ||
+ | <p>При преобразовании в логический тип, следующие значения рассматриваются как <b>FALSE</b>:</p> | ||
+ | <ul> | ||
+ | <li> | ||
+ | <p>Сам булев <strong>FALSE</strong></p> | ||
+ | |||
+ | </li> | ||
+ | <li> | ||
+ | <p>целое 0 (ноль) </p> | ||
+ | </li> | ||
+ | <li> | ||
+ | <p>число с плавающей точкой 0.0 (ноль) </p> | ||
+ | |||
+ | </li> | ||
+ | <li> | ||
+ | <p>пустая строка и строка 0</p> | ||
+ | </li> | ||
+ | <li> | ||
+ | <p>массив с нулевыми элементами</p> | ||
+ | |||
+ | </li> | ||
+ | <li> | ||
+ | <p>объект с нулевыми переменными-членами</p> | ||
+ | </li> | ||
+ | <li> | ||
+ | <p>специальный тип NULL(включая неустановленные переменные) </p> | ||
+ | |||
+ | </li> | ||
+ | </ul> | ||
+ | <p>Все остальные значения рассматриваются как <b>TRUE</b> (включая любой ресурс).</p> | ||
+ | <p>Внимание: <strong>-1</strong> считается <strong>TRUE</strong>, как и любое ненулевое (отрицательное или положительное) число!</p> | ||
+ | |||
+ | <p><strong>Примеры преобразований:</strong></p> | ||
+ | < p class="highlight"><code><span style="COLOR: #000000"><span | ||
+ | style="COLOR: #0000bb"><?php<br /> | ||
+ | var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) </span><span | ||
+ | style="COLOR: #dd0000">""</span><span | ||
+ | style="COLOR: #007700">); </span><span | ||
+ | style="COLOR: #ff8000">// bool(false)<br /> | ||
+ | </span><span | ||
+ | style="COLOR: #0000bb">var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) </span><span style="COLOR: #0000bb">1</span><span | ||
+ | style="COLOR: #007700">); </span><span | ||
+ | style="COLOR: #ff8000">// bool(true)<br /> | ||
+ | |||
+ | </span><span | ||
+ | style="COLOR: #0000bb">var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) -</span><span | ||
+ | style="COLOR: #0000bb">2</span><span | ||
+ | style="COLOR: #007700">); </span><span | ||
+ | style="COLOR: #ff8000">// bool(true)<br /> | ||
+ | </span><span | ||
+ | style="COLOR: #0000bb">var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) </span><span | ||
+ | style="COLOR: #dd0000">"foo"</span><span | ||
+ | style="COLOR: #007700">); </span><span | ||
+ | style="COLOR: #ff8000">// bool(true)<br /> | ||
+ | </span><span | ||
+ | style="COLOR: #0000bb">var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) </span><span | ||
+ | style="COLOR: #0000bb">2.3e5</span><span | ||
+ | style="COLOR: #007700">); </span><span | ||
+ | style="COLOR: #ff8000">// bool(true)<br /> | ||
+ | |||
+ | </span><span | ||
+ | style="COLOR: #0000bb">var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) array(</span><span | ||
+ | style="COLOR: #0000bb">12</span><span style="COLOR: #007700">)); </span><span | ||
+ | style="COLOR: #ff8000">// bool(true)<br /> | ||
+ | </span><span | ||
+ | style="COLOR: #0000bb">var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) array()); </span><span | ||
+ | style="COLOR: #ff8000">// bool(false)<br /> | ||
+ | </span><span | ||
+ | style="COLOR: #0000bb">var_dump</span><span | ||
+ | style="COLOR: #007700">((bool) </span><span | ||
+ | style="COLOR: #dd0000">"false"</span><span | ||
+ | style="COLOR: #007700">); </span><span | ||
+ | style="COLOR: #ff8000">// bool(true)<br /> | ||
+ | |||
+ | </span><span | ||
+ | style="COLOR: #0000bb">?></span></span></code><br /> | ||
+ | </p> | ||
+ | |||
==== '''Перетворення до числового типу''' ==== | ==== '''Перетворення до числового типу''' ==== |
Версія за 10:46, 29 квітня 2010
Типи данних
Опис типів даних
Мова 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.
Перетворення типів відбуваються за наступними правилами.
Перетворення до логічного типу
Вихідний тип | Результат |
---|---|
Undefined | false |
Null | false |
Boolean | без змін |
Number | false, якщо аргумент рівен +0, -0 або NaN; true в інших випадках |
String | false, якщо аргумент порожній рядок; true в інших випадках |
Object | true |
Преобразование в тип Boolean (двоичные данные)
Для несомненного преобразования значения в булев тип используйте приведение типа (bool) или (boolean). Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует булев аргумент.
При преобразовании в логический тип, следующие значения рассматриваются как FALSE:
-
Сам булев FALSE
-
целое 0 (ноль)
-
число с плавающей точкой 0.0 (ноль)
-
пустая строка и строка 0
-
массив с нулевыми элементами
-
объект с нулевыми переменными-членами
-
специальный тип NULL(включая неустановленные переменные)
Все остальные значения рассматриваются как TRUE (включая любой ресурс).
Внимание: -1 считается TRUE, как и любое ненулевое (отрицательное или положительное) число!
Примеры преобразований:
< p class="highlight"><?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?>
</p>
Перетворення до числового типу
Вихідний тип | Результат |
---|---|
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).
Перетворення до об'єктного типу
Вихідний тип тип | Результат |
---|---|
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 не обязательно. Однако, оно обязательно при декларации локальных переменных.