Динамическая типизация в JavaScript — это концепция, при которой тип переменной определяется автоматически в зависимости от присвоенного ей значения. Переменная объявляется с помощью let или const, а затем ей присваивается значение. Тип переменной определяется во время выполнения, а не во время компиляции.
Практическое применение
Рассмотрим пример:
let myVariable; // Переменная объявлена, но не имеет значения (undefined)
console.log(myVariable); // Выведет undefined
myVariable = 10; // Присвоено числовое значение
console.log(myVariable); // Выведет 10
myVariable = true; // Присвоено булево значение
console.log(myVariable); // Выведет true
myVariable = { x: true, y: 10 }; // Присвоено значение типа объект
console.log(myVariable); // Выведет объект { x: true, y: 10 }
В этом примере тип переменной myVariable меняется динамически в зависимости от присваиваемых значений. Используются примитивные типы данных.
Изменение свойств объектов и потенциальные ошибки
После присваивания объектного значения переменной myVariable, можно изменять свойства объекта с помощью точечной нотации:
myVariable.y = 20;
console.log(myVariable); // Выведет объект { x: true, y: 20 }
Однако, если после этого изменить тип переменной, попытка доступа к свойствам объекта приведёт к ошибке:
myVariable = null;
myVariable.x = false; // Вызовет ошибку TypeError: Cannot set property 'x' of null
Ошибка TypeError: Cannot set property ‘x’ of null возникает потому, что myVariable больше не является объектом, а имеет тип null. JavaScript не проверяет тип переменной до момента обращения к её свойствам, поэтому ошибка возникает во время выполнения. Это демонстрирует важность внимательности при работе с динамически типизированными языками, такими как JavaScript. Необходимо всегда помнить о текущем типе переменной, чтобы избежать неожиданных ошибок.
Работа с объектами
В примере выше показана работа с объектами и использование точечной нотации для доступа и изменения свойств. Более подробно операции добавления, изменения и удаления свойств объектов будут рассмотрены в других материалах.