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

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
Рядок 158: Рядок 158:
 
       </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>
+
<strong>[[Перетворення до логічного типу в JavaScript]]</strong>
  <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>Внимание:</strong> <strong>-1</strong> считается <strong>TRUE</strong>, как и любое ненулевое (отрицательное или положительное) число!</p>
+
 
+
<p><strong>Примеры преобразований:</strong></p>
+
<code><span style="COLOR: #000000"><span
+
style="COLOR: #0000bb">&lt;?php<br />
+
var_dump</span><span
+
style="COLOR: #007700">((bool) </span><span
+
style="COLOR: #dd0000">&quot;&quot;</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">&quot;foo&quot;</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">&quot;false&quot;</span><span
+
style="COLOR: #007700">);  </span><span
+
style="COLOR: #ff8000">// bool(true)<br />
+
</span><span
+
style="COLOR: #0000bb">?&gt;</span></span></code><br />
+
+
  
  

Версія за 10:31, 6 травня 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.

Приведение типов

Приведение типов в 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).


Перетворення до об'єктного типу

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


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