Типы и структуры данных JavaScript
Все языки программирования содержат встроенные типы данных, но они часто отличаются друг от друга в разных языках. Эта статья — попытка описать встроенные структуры (типы) данных, доступные в JavaScript, и их свойства. На их основе строятся другие структуры данных. Когда это возможно, то мы будем сравнивать типы данных в разных языках.
Динамическая типизация
JavaScript является слабо типизированным или динамическим языком. Это значит, что вам не нужно определять тип переменной заранее. Тип определится автоматически во время выполнения программы. Также это значит, что вы можете использовать одну переменную для хранения данных различных типов:
var foo = 42; // сейчас foo типа Number
foo = "bar"; // а теперь foo типа String
foo = true; // foo становится типа Boolean
Типы данных
Стандарт ECMAScript определяет 8 типов:
-
6 типов данных являющихся примитивами:
- Undefined (Неопределённый тип) :
typeof instance === "undefined" - Boolean (Булев, Логический тип) :
typeof instance === "boolean" - Number (Число) :
typeof instance === "number" - String (Строка) :
typeof instance === "string" - BigInt :
typeof instance === "bigint" - Symbol (в ECMAScript 6) :
typeof instance === "symbol"
- Undefined (Неопределённый тип) :
-
Null (Null тип ) :
typeof instance === "object". Специальный примитив, используемый не только для данных но и в качестве указателя на финальную точку в Цепочке Прототипов; -
Object (Объект) :
typeof instance === "object". Простая структура, используемая не только для хранения данных, но и для создания других структур, где любая структура создаётся с использованием ключевого словаnew: new Object, new Array, new Map, new Set, new WeakMap, new WeakSet, new Date и множество других структур;
И здесь нам необходимо сделать предостережение относительно использования оператора typeof для определения типа структур, т.к. все структуры будут возвращать "object" при его использовании, так как назначение typeof — проверка типа данных, но не структур. Если проверить тип структуры всё же необходимо, то в этом случае желательно использовать оператор instanceof, так как именно он отвечает на вопрос о том, какой конструктор был использован для создания структуры.
Стоит отметить два особых случая работы оператора typeof: возврат "object" для значения null и