HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Что произойдет, если попытаться изменить символ в строке?</p>
1 <p>Что произойдет, если попытаться изменить символ в строке?</p>
2 <p>Как это ни странно, но значение переменной firstName останется прежним, хотя код выполнится без ошибок. Так происходит из-за неизменяемости примитивных типов в JavaScript - язык не дает никакой физической возможности поменять строку. Неизменяемость примитивных типов важна по многим причинам, ключевая - производительность. Но что делать, если нам действительно нужно ее изменить? Для этого и существуют переменные:</p>
2 <p>Как это ни странно, но значение переменной firstName останется прежним, хотя код выполнится без ошибок. Так происходит из-за неизменяемости примитивных типов в JavaScript - язык не дает никакой физической возможности поменять строку. Неизменяемость примитивных типов важна по многим причинам, ключевая - производительность. Но что делать, если нам действительно нужно ее изменить? Для этого и существуют переменные:</p>
3 <p>Есть большая разница между изменением значения переменной и изменением самих данных, которые хранятся в этой переменной. Примитивные типы в JavaScript поменять нельзя, а заменить значение переменной - без проблем.</p>
3 <p>Есть большая разница между изменением значения переменной и изменением самих данных, которые хранятся в этой переменной. Примитивные типы в JavaScript поменять нельзя, а заменить значение переменной - без проблем.</p>
4 <h2>Слабая типизация</h2>
4 <h2>Слабая типизация</h2>
5 <p>Нам известно про два разных типа данных: числа и строки. Мы, например, можем складывать числа, потому что операция сложения - это операция для типа "числа".</p>
5 <p>Нам известно про два разных типа данных: числа и строки. Мы, например, можем складывать числа, потому что операция сложения - это операция для типа "числа".</p>
6 <p>А что, если применить эту операцию не к двум числам, а к числу и строке?</p>
6 <p>А что, если применить эту операцию не к двум числам, а к числу и строке?</p>
7 <p>Несмотря на то, что 1 - это число, а не строка, интерпретатор JavaScript выдал ответ 17, как если бы мы складывали две строки. Когда JavaScript видит несоответствие типов, он сам пытается преобразовать информацию. В данном случае он преобразовал число 1 в строку '1', а потом спокойно сделал конкатенацию '1' и '7'.</p>
7 <p>Несмотря на то, что 1 - это число, а не строка, интерпретатор JavaScript выдал ответ 17, как если бы мы складывали две строки. Когда JavaScript видит несоответствие типов, он сам пытается преобразовать информацию. В данном случае он преобразовал число 1 в строку '1', а потом спокойно сделал конкатенацию '1' и '7'.</p>
8 <p>Не все языки так делают. JavaScript - это язык со<strong>слабой типизацией</strong>. Он знает о существовании разных типов (числа, строки и др.), но относится к их использованию не очень строго, пытаясь преобразовывать информацию, когда это кажется разумным. Иногда JavaScript даже доходит до крайностей. Большинство выражений, не работающих в других языках, прекрасно работают в JavaScript. Попробуйте выполнить любую арифметическую операцию (кроме сложения), подставив туда строки или любые другие типы данных (кроме ситуации, когда оба операнда - это числа или строки, содержащие только число) - вы увидите, что они всегда будут работать и возвращать NaN, что довольно логично.</p>
8 <p>Не все языки так делают. JavaScript - это язык со<strong>слабой типизацией</strong>. Он знает о существовании разных типов (числа, строки и др.), но относится к их использованию не очень строго, пытаясь преобразовывать информацию, когда это кажется разумным. Иногда JavaScript даже доходит до крайностей. Большинство выражений, не работающих в других языках, прекрасно работают в JavaScript. Попробуйте выполнить любую арифметическую операцию (кроме сложения), подставив туда строки или любые другие типы данных (кроме ситуации, когда оба операнда - это числа или строки, содержащие только число) - вы увидите, что они всегда будут работать и возвращать NaN, что довольно логично.</p>
9 <p>В языках со<strong>строгой типизацией</strong>сложить число со строкой не получится.</p>
9 <p>В языках со<strong>строгой типизацией</strong>сложить число со строкой не получится.</p>
10 <p>JavaScript был создан для интернета, а в интернете вся информация - это строки. Даже когда вы вводите на сайте номер телефона или год рождения, на сервер эта информация поступает не как числа, а как строки. Поэтому авторы языка решили, что автоматически преобразовывать типы - правильно и удобно.</p>
10 <p>JavaScript был создан для интернета, а в интернете вся информация - это строки. Даже когда вы вводите на сайте номер телефона или год рождения, на сервер эта информация поступает не как числа, а как строки. Поэтому авторы языка решили, что автоматически преобразовывать типы - правильно и удобно.</p>
11 <p>Такое автоматическое неявное преобразование типов с одной стороны и правда удобно. Но на практике это свойство языка создает множество ошибок и проблем, которые трудно найти. Код может иногда работать, а иногда не работать - в зависимости от того, "повезло" ли в конкретном случае с автоматическим преобразованием. Программист это заметит не сразу.</p>
11 <p>Такое автоматическое неявное преобразование типов с одной стороны и правда удобно. Но на практике это свойство языка создает множество ошибок и проблем, которые трудно найти. Код может иногда работать, а иногда не работать - в зависимости от того, "повезло" ли в конкретном случае с автоматическим преобразованием. Программист это заметит не сразу.</p>
12 <p>В дальнейших заданиях вы будете встречаться с таким поведением не раз. Часто будет возникать вопрос "почему мой код работает не так, как я ожидаю?".</p>
12 <p>В дальнейших заданиях вы будете встречаться с таким поведением не раз. Часто будет возникать вопрос "почему мой код работает не так, как я ожидаю?".</p>
13 <p>Слабая типизация красной нитью проходит сквозь всю разработку на Javascript.</p>
13 <p>Слабая типизация красной нитью проходит сквозь всю разработку на Javascript.</p>