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

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
Рядок 111: Рядок 111:
 
</ul>
 
</ul>
 
<p>Все остальные значения рассматриваются как <b>TRUE</b> (включая любой ресурс).</p>
 
<p>Все остальные значения рассматриваются как <b>TRUE</b> (включая любой ресурс).</p>
<p>Внимание: <strong>-1</strong> считается <strong>TRUE</strong>, как и любое ненулевое (отрицательное или положительное) число!</p>
+
<p><strong>Внимание:</strong>  <strong>-1</strong> считается <strong>TRUE</strong>, как и любое ненулевое (отрицательное или положительное) число!</p>
  
 
<p><strong>Примеры преобразований:</strong></p>
 
<p><strong>Примеры преобразований:</strong></p>

Версія за 11:03, 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, как и любое ненулевое (отрицательное или положительное) число!

Примеры преобразований:

<?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)
?>


Перетворення до числового типу

Вихідний тип Результат
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 не обязательно. Однако, оно обязательно при декларации локальных переменных.


Інтернет-програмування