Відмінності між версіями «Змінні та типи данних в JavaScript»
Kolbka (обговорення • внесок) |
|||
Рядок 1: | Рядок 1: | ||
− | + | 1. '''Типи данних''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 1.1. '''Опис типів даних''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Мова JavaScript містить шість типів даних '''Undefined'''(невизначений), '''Null''' (нульовий), '''Boolean''' (логічний), '''String''' (строковий), '''Number''' (числовий) і '''Object''' (об'єктний). Ця відносно невелика кількість типів дозволяє, тим не менше, створювати повноцінні сценарії для виконання багатьох функцій. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 1.1.1. '''Тип Undefined (невизначений)''' | |
− | + | ||
− | + | ||
− | + | Цей тип складається з єдиного значення '''undefined'''. Це значення, яке приймає змінна, яка оголошена в програмі, але якої ще не присвоєно ніякого значення. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 1.1.2. '''Тип Null (нульовий)''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Цей тип складається з єдиного значення '''null'''. Це значення означає нульове, порожне або неіснуюче посилання. | |
− | + | ||
− | + | ||
− | + | 1.1.3. '''Тип Boolean (логічний)''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Цей тип складається рівно з двох логічних значень: '''true''' (істина) і '''false''' (брехня). | |
− | + | ||
− | + | ||
− | + | ||
− | + | 1.1.4. '''Тип String (строковий)''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Цей тип складається з усіх можливих текстових рядків. Кожен рядок представляє собою упорядкований масив з нуля або більше символів Unicode (тобто 16-бітових цілих чисел без знака), званих ''елементами рядка.'' Елементи рядка нумеруються, починаючи з нуля. Довжина рядка - це кількість елементів в ній; порожній рядок складається з нуля елементів. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 1.1.5. '''Тип Number (числовий)''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | < | + | Цей тип має рівно 18437736874454810627 (тобто 2<sup>64</sup> - 2<sup>53</sup> + 3)64-бітовому формату плаваючих чисел подвійної точності IEEE 754 з тим єдиним винятком, що 9007199254740990 (тобто 2<sup>53</sup> - 2) різних значень "Не число" даного формату представляються в JavaScript одним значенням '''NaN'''. |
− | + | Ще два спеціальні значення - це додатня незкінченність і відємна нескінченність яким в JavaScript відповідають вираження '''+ Infinity''' (або просто '''Inifinity''') і '''-Infinity'''. Відзначимо також, що в даному форматі розрізняються позитивний нуль ('''+0''' або '''0''') і негативний нуль ('''-0'''). | |
− | + | ||
− | + | ||
− | + | ||
− | + | 1.1.6. '''Тип Object (об'єктний)''' | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Значенням цього типу є ''об'єкти''. Об'єкт - це невпорядкований набір властивостей | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | < | + | 1.2. '''Перетворення типів''' |
− | < | + | |
− | + | JavaScript - ''слаботіпізірованнa мовa''. Це означає, що в декларації змінної ми не вказуємо її тип і надалі можемо привласнювати їй значення будь-яких типів. Виконуюча система JavaScript сама виконує автоматичне перетворення типів даних в міру необхідності. Для явного перетворення типів використовуються методи Boolean, Number, Object та String. | |
− | < | + | |
− | - | + | Перетворення типів відбуваються за наступними правилами. |
− | </ | + | |
− | < | + | 1.2.1 '''Перетворення до логічного типу''' |
− | < | + | |
− | < | + | <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>, якщо аргумент — порожній рядок; <strong>true</strong> | ||
+ | в інших випадках</td> | ||
+ | |||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Object</td> | ||
+ | <td><strong>true</strong></td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | </div> | ||
+ | |||
+ | 1.2.2. '''Перетворення до числового типу''' | ||
+ | |||
+ | <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> | ||
+ | |||
+ | 1.2.3. '''Перетворення до рядкового типу''' | ||
+ | |||
+ | <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>"undefined"</tt></td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Null</td> | ||
+ | <td><tt>"null"</tt></td> | ||
+ | |||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>Boolean</td> | ||
+ | <td><tt>"true"</tt>, якщо аргумент рівен <strong>true</strong>, і <tt>"false"</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>"NaN"</strong>;</li> | ||
+ | |||
+ | <li>якщо <em>n</em> рівне <strong>+0</strong> або <strong>-0</strong>, то результат <strong>"0"</strong>;</li> | ||
+ | <li>якщо <em>n</em> відємне, то результат буде конкатенацією рядка <strong>"-"</strong> | ||
+ | |||
+ | і результату перетворення в рядок числа <em>-n</em>;</li> | ||
+ | <li>якщо <em>n</em> рівне некінченності, то результат <strong>"Infinity"</strong>;</li> | ||
+ | <li>в інших випадках нехай <em>m</em>, <em>k</em> и <em>s</em> — такі цілі числа, | ||
+ | що <em>k</em> >= 1, 10<sup><em>k</em>-1</sup> <= <em>s</em> < 10<sup><em>k</em></sup>, | ||
+ | <em>n</em> рівне <em>s</em> x 10<sup><em>m</em>-<em>k</em></sup> и <em>k</em> — | ||
+ | |||
+ | найменьше з можливих. Відмітемо, що <em>k</em> — це кількість цифр у десятковому | ||
+ | представленні <em>s </em>, що <em>s</em> не діляться на 10 і що найменш значуща цифра <em>s</em> | ||
+ | може не бути однозначно визначеною. Тоді</li> | ||
+ | <li>якщо <em>k</em> <= <em>m</em> <= 21, то результат складається з <em>k</em> десятичних | ||
+ | цифр <em>s</em> (без провідних нулів), за якими йдуть <em>m</em>-<em>k</em> символів <strong>'0'</strong>;</li> | ||
+ | |||
+ | <li>інакше, якщо 0 < <em>m</em> <= 21, то результат складається з <em>m</em> старших десяткових | ||
+ | цифр <em>s</em>, за якими слідує десяткова точка <strong>'.'</strong> і <em>k</em>-<em>m</em> | ||
+ | |||
+ | залишившихся десяткових цифр <em>s</em>;</li> | ||
+ | <li>інакше, якщо -6 < <em>m</em> <= 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> | ||
+ | |||
+ | 1.2.4. '''Приклади неявних перетворень''' | ||
+ | |||
+ | У виразах, що з'єднують числові і рядкові значення операцією +, JavaScript перетворює числа в рядки, наприклад: |
Версія за 16:08, 21 квітня 2010
1. Типи данних
1.1. Опис типів даних
Мова JavaScript містить шість типів даних Undefined(невизначений), Null (нульовий), Boolean (логічний), String (строковий), Number (числовий) і Object (об'єктний). Ця відносно невелика кількість типів дозволяє, тим не менше, створювати повноцінні сценарії для виконання багатьох функцій.
1.1.1. Тип Undefined (невизначений)
Цей тип складається з єдиного значення undefined. Це значення, яке приймає змінна, яка оголошена в програмі, але якої ще не присвоєно ніякого значення.
1.1.2. Тип Null (нульовий)
Цей тип складається з єдиного значення null. Це значення означає нульове, порожне або неіснуюче посилання.
1.1.3. Тип Boolean (логічний)
Цей тип складається рівно з двох логічних значень: true (істина) і false (брехня).
1.1.4. Тип String (строковий)
Цей тип складається з усіх можливих текстових рядків. Кожен рядок представляє собою упорядкований масив з нуля або більше символів Unicode (тобто 16-бітових цілих чисел без знака), званих елементами рядка. Елементи рядка нумеруються, починаючи з нуля. Довжина рядка - це кількість елементів в ній; порожній рядок складається з нуля елементів.
1.1.5. Тип Number (числовий)
Цей тип має рівно 18437736874454810627 (тобто 264 - 253 + 3)64-бітовому формату плаваючих чисел подвійної точності IEEE 754 з тим єдиним винятком, що 9007199254740990 (тобто 253 - 2) різних значень "Не число" даного формату представляються в JavaScript одним значенням NaN. Ще два спеціальні значення - це додатня незкінченність і відємна нескінченність яким в JavaScript відповідають вираження + Infinity (або просто Inifinity) і -Infinity. Відзначимо також, що в даному форматі розрізняються позитивний нуль (+0 або 0) і негативний нуль (-0).
1.1.6. Тип Object (об'єктний)
Значенням цього типу є об'єкти. Об'єкт - це невпорядкований набір властивостей
1.2. Перетворення типів
JavaScript - слаботіпізірованнa мовa. Це означає, що в декларації змінної ми не вказуємо її тип і надалі можемо привласнювати їй значення будь-яких типів. Виконуюча система JavaScript сама виконує автоматичне перетворення типів даних в міру необхідності. Для явного перетворення типів використовуються методи Boolean, Number, Object та String.
Перетворення типів відбуваються за наступними правилами.
1.2.1 Перетворення до логічного типу
Вихідний тип | Результат |
---|---|
Undefined | false |
Null | false |
Boolean | без змін |
Number | false, якщо аргумент рівен +0, -0 або NaN; true в інших випадках |
String | false, якщо аргумент порожній рядок; true в інших випадках |
Object | true |
1.2.2. Перетворення до числового типу
Вихідний тип | Результат |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | 1, якщо аргумент рівен true, і 0, якщо аргумент рівен false |
Number | без змін |
String | якщо рядок містить правильне число (можливо з пробілами перед та / або після нього), то це число; NaN в іншому випадку |
Object | результат перетворення значення об'єкта за замовчуванням |
1.2.3. Перетворення до рядкового типу
Вихідний тип | Результат |
---|---|
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).
1.2.4. Приклади неявних перетворень
У виразах, що з'єднують числові і рядкові значення операцією +, JavaScript перетворює числа в рядки, наприклад: