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
Например, числа можно складывать, делить и умножать. А строки складываются по-другому — при помощи конкатенации. Умножать строку на строку бессмысленно:
14
17
15
18
```javascript
16
-
constage=25; // number
17
-
constname='Alice'; // string
18
-
constisActive=true; // boolean
19
-
constnothing=null; // null
20
-
let unset; // undefined
19
+
// Бессмыслица: 'мама' * 'блокнот'
21
20
```
22
21
23
-
## Зачем нужны типы?
22
+
## Числа и строки относятся к разным типам
24
23
25
-
Тип влияет на поведение операций. Например, `+` для чисел — это сложение, а для строк — конкатенация:
24
+
Пример вывода числа:
26
25
27
26
```javascript
28
-
console.log(1+2); // => 3
29
-
console.log('1'+'2'); // => '12'
27
+
console.log(5); // => 5
28
+
console.log(-5); // => -5
30
29
```
31
30
31
+
Пример вывода строки:
32
+
33
+
```javascript
34
+
console.log('5'); // => 5
35
+
console.log('-5'); // => -5
36
+
```
37
+
38
+
На экране результат выглядит одинаково, но внутри программы это совершенно разные вещи:
39
+
40
+
| Значение | Тип данных |
41
+
|----------|-----------------------|
42
+
|`5`|`number` (число) |
43
+
|`'5'`|`string` (строка) |
44
+
45
+
## Числа в JavaScript
46
+
47
+
Во многих языках целые и дробные числа — это разные типы (например, в Python это `int` и `float`). В JavaScript такого деления нет: и целые, и дробные числа относятся к одному типу — `number`.
48
+
49
+
```javascript
50
+
console.log(10.234); // => 10.234
51
+
console.log(-0.4); // => -0.4
52
+
53
+
console.log(3.5+1.2); // => 4.7
54
+
console.log(5/2); // => 2.5
55
+
console.log(2.75-0.5); // => 2.25
56
+
```
57
+
58
+
## Примитивные типы
59
+
60
+
Типы вроде `string`, `number`, `boolean` называются примитивными — они встроены прямо в язык.
61
+
62
+
```text
63
+
Примитивные типы JavaScript
64
+
├── number : числа (целые и дробные) (7, -3, 3.14)
65
+
├── string : строки ('hello')
66
+
├── boolean : логический тип (true, false)
67
+
├── null : намеренное отсутствие значения
68
+
└── undefined : значение не задано
69
+
```
70
+
71
+
Кроме строк и чисел, в JavaScript есть логический тип `boolean` со значениями `true` и `false`, а также специальные значения `null` и `undefined`. Подробнее мы столкнёмся с ними в будущем.
Существуют и составные типы — массивы, объекты и другие. С ними мы познакомимся позже. Более того, в JavaScript можно создавать и свои собственные типы (например, классы), но для начала важно хорошо разобраться с примитивами.
**Примитивные типы** в JavaScript неизменяемы (immutable). Это значит, что после создания строку нельзя изменить — ни поменять символ, ни добавить новый.
1
+
Представим, что у нас есть строка, и мы хотим заменить в ней один символ, например первую букву имени:
2
2
3
3
```javascript
4
4
let greeting ='Hello';
5
-
6
-
// Попытка изменить первый символ — ничего не произойдёт
7
5
greeting[0] ='J';
8
6
console.log(greeting); // => Hello (не изменилось!)
9
7
```
10
8
11
-
## Что можно сделать
9
+
В отличие от некоторых языков, где такая попытка приводит к ошибке, в JavaScript присваивание по индексу просто **тихо игнорируется**: строка не меняется (а в строгом режиме это вызовет ошибку `TypeError`). Причина одна: строки в JavaScript нельзя изменять по частям. После создания они становятся неизменяемыми (или, как говорят программисты, иммутабельными).
10
+
11
+
## Почему строки неизменяемые?
12
+
13
+
Примитивные типы (строки, числа, логические значения) в JavaScript менять нельзя. Это даёт важные преимущества:
14
+
15
+
- Безопасность: значения не изменятся случайно.
16
+
- Производительность: с неизменяемыми значениями проще работать внутри движка.
17
+
- Предсказуемость: меньше неожиданных эффектов при передаче данных в функции.
18
+
19
+
## А как тогда «изменить» строку?
20
+
21
+
Если нужно «изменить» строку, создают новую на основе старой и сохраняют её в ту же переменную. Например, заменим первую букву:
22
+
23
+
```javascript
24
+
constword='hello';
25
+
constfixed='H'+word.slice(1);
26
+
console.log(fixed); // => Hello
27
+
```
28
+
29
+
```text
30
+
word = 'hello'
31
+
32
+
word[0] = 'H' → ничего не происходит, строки неизменяемы
12
33
13
-
Переприсвоить переменную целиком — это работает:
34
+
'H' + word.slice(1)
35
+
└────────┬────────┘
36
+
'Hello' ← создана новая строка
37
+
```
38
+
39
+
Переприсвоить переменную целиком тоже можно — но это создаёт **новую** строку, а не меняет старую:
14
40
15
41
```javascript
16
42
let greeting ='Hello';
17
43
greeting ='Jello';
18
44
console.log(greeting); // => Jello
19
45
```
20
46
21
-
Но это создаёт **новую строку**, а не изменяет старую.
22
-
23
-
## Зачем это знать?
47
+
## Новая переменная или та же?
24
48
25
-
Если вам нужно «изменить» строку, нужно создавать новую на основе старой. Например, заменить первый символ:
49
+
Переиспользовать переменную стоит только тогда, когда речь идёт об одной и той же сущности. Если это уже другие данные, лучше завести отдельную переменную:
26
50
27
51
```javascript
28
-
constword='hello';
29
-
constfixed='H'+word.slice(1);
30
-
console.log(fixed); // => Hello
52
+
// Одна и та же строка, просто обновляем
53
+
let name ='Alexander';
54
+
name ='Blexander';
55
+
56
+
// Разные сущности — лучше разные переменные
57
+
constfirstName='Alexander';
58
+
constcorrectedFirstName='Blexander';
31
59
```
32
60
33
-
## Числа тоже неизменяемы
61
+
Попытка «запихать» все строки в одну переменную запутывает код: переменная перестаёт говорить, что в ней хранится.
62
+
63
+
## Вывод
34
64
35
-
То же самое касается чисел и булевых значений — они не объекты с изменяемым состоянием, а просто значения.
65
+
Примитивные типы данных в JavaScript (строки, числа, логические значения) являются неизменяемыми (immutable). Это означает, что после создания их значение изменить нельзя. Поменять один символ в строке невозможно — любые «изменения» происходят путём создания нового значения и переопределения переменной.
0 commit comments