Пожалуй, JavaScript - это самый нетипизированный язык среди всех нетипизированнных.
Нетипизированный (untyped) язык - это язык, который:
- Не требует указывать тип данных при объявлении
- Позволяет любой переменной присваивать любые значения
- Позволяет использовать в выражении переменные разных типов без явных преобразований
Здесь важно, чтобы все эти свойства имелись в наличии одновременно. Потому что, например, Python не требует указывать тип данных при объявлении переменной, однако не позволяет использовать переменные разных типов в одном выражении без явных преобразований, поэтому является типизированным языком (хотя так с первого взгляда и не скажешь).
Ну а JavaScript лишён всех этих предрассудков ))) Здесь совершенно спокойно можно сделать, например, так:
var x = 10;
var y = 'Три';
var z = x + y;
Что при этом получится - это другой вопрос. Но это не является синтаксической ошибкой.
Вы также можете сделать что-то вроде этого:
x = 10;
x = 'Привет';
и это также не будет ошибкой, в отличие от строго типизированных языков, таких как Паскаль, С/С++ и т.п.
Отсутствие строгой типизации в JavaScript приводит к тому, что в случае необходимости значения одного типа неявно и автоматически преобразуются в другой. То есть в первом примере сначала х преобразуется в строку (потому что преобразовать у в число не получается), затем две строки складываются и результат помещается в z. В итоге z будет содержать:
10Три
А переменная z будет строкового типа (ну да, типы данных в JavaScript всё-таки есть). В этом легко убедиться:
alert(typeof z);
это выражение выведет string.
Нетипизированность JavaScript с одной стороны, упрощает программирование. Однако в некоторых случаях это упрощение может привести к неожиданным результатам и труднонаходимым ошибкам. Так что не теряйте бдительность )))
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.