You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/05-types/article.md
+29-22Lines changed: 29 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,9 @@
1
1
# Типы данных
2
2
3
+
Значение в JavaScript всегда относится к данным определённого типа. Например, это может быть строка или число.
4
+
5
+
Есть восемь основных типов данных в JavaScript. В этой главе мы рассмотрим их в общем, а в следующих главах поговорим подробнее о каждом.
6
+
3
7
Переменная в JavaScript может содержать любые данные. В один момент там может быть строка, а в другой - число:
4
8
5
9
```js
@@ -10,8 +14,6 @@ message = 123456;
10
14
11
15
Языки программирования, в которых такое возможно, называются "динамически типизированными". Это значит, что типы данных есть, но переменные не привязаны ни к одному из них.
12
16
13
-
Есть восемь основных типов данных в JavaScript. В этой главе мы рассмотрим их в общем, а в следующих главах поговорим подробнее о каждом.
14
-
15
17
## Число
16
18
17
19
```js
@@ -53,7 +55,7 @@ n = 12.345;
53
55
Если где-то в математическом выражении есть `NaN`, то результатом вычислений с его участием будет `NaN`.
54
56
55
57
```smart header="Математические операции -- безопасны"
56
-
Математические операции в JavaScript "безопасны". Мы можем делать что угодно: делить на ноль, обращаться со строками как с числами и т.д.
58
+
Математические операции в JavaScript "безопасны". Мы можем делать что угодно: делить на ноль, обращаться с нечисловыми строками как с числами и т.д.
57
59
58
60
Скрипт никогда не остановится с фатальной ошибкой (не "умрёт"). В худшем случае мы получим `NaN` как результат выполнения.
59
61
```
@@ -64,7 +66,9 @@ n = 12.345;
64
66
65
67
## BigInt
66
68
67
-
В JavaScript тип "number" не может содержать числа больше, чем <code>2<sup>53</sup></code> (или меньше, чем <code>-2<sup>53</sup></code> для отрицательных). Это техническое ограничение вызвано их внутренним представлением. <code>2<sup>53</sup></code>- это достаточно большое число, состоящее из 16 цифр, поэтому чаще всего проблем не возникает. Но иногда нам нужны действительно гигантские числа, например в криптографии или при использовании метки времени ("timestamp") с микросекундами.
69
+
В JavaScript тип "number" не может содержать числа больше, чем <code>(2<sup>53</sup>-1)</code> (т. е. `9007199254740991`), или меньше, чем <code>-(2<sup>53</sup>-1)</code> для отрицательных чисел. Это техническое ограничение вызвано их внутренним представлением.
70
+
71
+
Для большинства случаев этого достаточно. Но иногда нам нужны действительно гигантские числа, например, в криптографии или при использовании метки времени ("timestamp") с микросекундами.
68
72
69
73
Тип `BigInt` был добавлен в JavaScript, чтобы дать возможность работать с целыми числами произвольной длины.
Так как `BigInt`числа нужны достаточно редко, мы рассмотрим их в отдельной главе <info:bigint>.
82
+
Так как `BigInt`-числа нужны достаточно редко, мы рассмотрим их в отдельной главе <info:bigint>. Ознакомьтесь с ней, когда вам понадобятся настолько большие числа.
79
83
80
84
```smart header="Поддержка"
81
-
В данный момент `BigInt` поддерживается только в браузерах Firefox и Chrome, но не поддерживается в Safari/IE/Edge.
85
+
В данный момент `BigInt` поддерживается только в браузерах Firefox, Chrome и Edge, но не поддерживается в Safari и IE.
82
86
```
83
87
84
88
## Строка
@@ -99,7 +103,7 @@ let phrase = `Обратные кавычки позволяют встраив
99
103
100
104
Двойные или одинарные кавычки являются "простыми", между ними нет разницы в JavaScript.
101
105
102
-
Обратные кавычки же имеют "расширенную функциональность". Они позволяют нам встраивать выражения в строку, заключая их в `${…}`. Например:
106
+
Обратные же кавычки имеют расширенную функциональность. Они позволяют нам встраивать выражения в строку, заключая их в `${…}`. Например:
Выражение внутри `${…}` вычисляется, и его результат становится частью строки. Мы можем положить туда всё, что угодно: переменную `name` или выражение `1 + 2`, или что-то более сложное.
118
+
Выражение внутри `${…}` вычисляется, и его результат становится частью строки. Мы можем положить туда всё, что угодно: переменную `name`, или выражение `1 + 2`, или что-то более сложное.
115
119
116
120
Обратите внимание, что это можно делать только в обратных кавычках. Другие кавычки не имеют такой функциональности встраивания!
```smart header="Нет отдельного типа данных для одного символа."
124
128
В некоторых языках, например C и Java, для хранения одного символа, например `"a"` или `"%"`, существует отдельный тип. В языках C и Java это `char`.
125
129
126
-
В JavaScript подобного типа нет, есть только тип `string`. Строка может содержать один символ или множество.
130
+
В JavaScript подобного типа нет, есть только тип `string`. Строка может содержать ноль символов (быть пустой), один символ или множество.
127
131
```
128
132
129
133
## Булевый (логический) тип
@@ -163,7 +167,7 @@ let age = null;
163
167
164
168
Это просто специальное значение, которое представляет собой "ничего", "пусто" или "значение неизвестно".
165
169
166
-
В приведённом выше коде указано, что переменная `age`неизвестна или не имеет значения по какой-то причине.
170
+
В приведённом выше коде указано, что значение переменной `age`неизвестно.
167
171
168
172
## Значение "undefined"
169
173
@@ -174,17 +178,18 @@ let age = null;
174
178
Если переменная объявлена, но ей не присвоено никакого значения, то её значением будет `undefined`:
175
179
176
180
```js run
177
-
letx;
181
+
letage;
178
182
179
-
alert(x); // выведет "undefined"
183
+
alert(age); // выведет "undefined"
180
184
```
181
185
182
186
Технически мы можем присвоить значение `undefined` любой переменной:
183
187
184
188
```js run
185
-
letx=123;
189
+
letage=123;
186
190
187
-
x =undefined;
191
+
// изменяем значение на undefined
192
+
age =undefined;
188
193
189
194
alert(x); // "undefined"
190
195
```
@@ -195,15 +200,17 @@ alert(x); // "undefined"
195
200
196
201
Тип `object` (объект) -- особенный.
197
202
198
-
Все остальные типы называются "примитивными", потому что их значениями могут быть только простые значения (будь то строка или число, или что-то ещё). Объекты же используются для хранения коллекций данных или более сложных объектов. Мы разберёмся с ними позднее в главе <info:object> после того, как узнаем больше о примитивах.
203
+
Все остальные типы называются "примитивными", потому что их значениями могут быть только простые значения (будь то строка, или число, или что-то ещё). В объектах же хранят коллекции данных или более сложные структуры.
204
+
205
+
Объекты занимают важное место в языке и требуют особого внимания. Мы разберёмся с ними в главе <info:object> после того, как узнаем больше о примитивах.
199
206
200
-
Тип `symbol` (символ) используется для создания уникальных идентификаторов объектов. Мы упоминаем здесь о нём для полноты картины, изучим этот тип после объектов.
207
+
Тип `symbol` (символ) используется для создания уникальных идентификаторов в объектах. Мы упоминаем здесь о нём для полноты картины, изучим этот тип после объектов.
201
208
202
209
## Оператор typeof [#type-typeof]
203
210
204
211
Оператор `typeof` возвращает тип аргумента. Это полезно, когда мы хотим обрабатывать значения различных типов по-разному или просто хотим сделать проверку.
1.`Math`- это встроенный объект, который предоставляет математические операции и константы. Мы рассмотрим его подробнее в главе <info:number>. Здесь он служит лишь примером объекта.
244
-
2. Результатом вызова `typeof null` является `"object"`. Это неверно. Это официально признанная ошибка в `typeof`, сохранённая для совместимости. Конечно, `null` не является объектом. Это специальное значение с отдельным типом. Повторимся, это ошибка в языке.
245
-
3. Вызов `typeof alert` возвращает `"function"`, потому что `alert` является функцией. Мы изучим функции в следующих главах, где заодно увидим, что в JavaScript нет специального типа "функция". Функции относятся к объектному типу. Но `typeof` обрабатывает их особым образом, возвращая `"function"`. Формально это неверно, но очень удобно на практике.
250
+
1.`Math`— это встроенный объект, который предоставляет математические операции и константы. Мы рассмотрим его подробнее в главе <info:number>. Здесь он служит лишь примером объекта.
251
+
2. Результатом вызова `typeof null` является `"object"`. Это официально признанная ошибка в `typeof`, ведущая начало с времён создания JavaScript и сохранённая для совместимости. Конечно, `null` не является объектом. Это специальное значение с отдельным типом.
252
+
3. Вызов `typeof alert` возвращает `"function"`, потому что `alert` является функцией. Мы изучим функции в следующих главах, где заодно увидим, что в JavaScript нет специального типа "функция". Функции относятся к объектному типу. Но `typeof` обрабатывает их особым образом, возвращая `"function"`. Так тоже повелось от создания JavaScript. Формально это неверно, но может быть удобным на практике.
246
253
247
254
248
255
## Итого
249
256
250
257
В JavaScript есть 8 основных типов.
251
258
252
-
-`number` для любых чисел: целочисленных или чисел с плавающей точкой, целочисленные значения ограничены диапазоном ±2<sup>53</sup>.
259
+
-`number` для любых чисел: целочисленных или чисел с плавающей точкой; целочисленные значения ограничены диапазоном <code>±(2<sup>53</sup>-1)</code>.
253
260
-`bigint` для целых чисел произвольной длины.
254
-
-`string` для строк. Строка может содержать один или больше символов, нет отдельного символьного типа.
261
+
-`string` для строк. Строка может содержать ноль или больше символов, нет отдельного символьного типа.
255
262
-`boolean` для `true`/`false`.
256
263
-`null` для неизвестных значений -- отдельный тип, имеющий одно значение `null`.
257
264
-`undefined` для неприсвоенных значений -- отдельный тип, имеющий одно значение `undefined`.
0 commit comments