This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

Типы и структуры данных JavaScript

Все языки программирования содержат встроенные типы данных, но они часто отличаются друг от друга в разных языках. Эта статья — попытка описать встроенные структуры (типы) данных, доступные в JavaScript, и их свойства. На их основе строятся другие структуры данных. Когда это возможно, то мы будем сравнивать типы данных в разных языках.

Динамическая типизация

JavaScript является слабо типизированным или динамическим языком. Это значит, что вам не нужно определять тип переменной заранее. Тип определится автоматически во время выполнения программы. Также это значит, что вы можете использовать одну переменную для хранения данных различных типов:

js
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"
  • 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 и