Какие типы данных существуют в JavaScript?

Ответ

В JavaScript 8 встроенных типов данных, разделенных на две категории:

Примитивные типы (передаются по значению):

  1. number: целые и числа с плавающей запятой, включая Infinity, -Infinity и NaN.
  2. bigint: для целых чисел произвольной длины (например, 9007199254740991n).
  3. string: последовательность символов, представляющая текст.
  4. boolean: логическое значение true или false.
  5. undefined: значение, присвоенное неинициализированной переменной.
  6. null: специальное значение, обозначающее "ничего", "пусто" или "значение неизвестно".
  7. symbol: уникальное и неизменяемое значение, часто используемое в качестве ключа объекта.

Объектный тип (передается по ссылке):

  1. object: коллекция свойств. К этому типу также относятся массивы (Array), функции (Function), даты (Date) и другие структурные типы.

Проверка типа:

console.log(typeof 42); // "number"
console.log(typeof 'Hello'); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (известная историческая особенность языка)
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof Symbol('id')); // "symbol"
console.log(typeof 10n); // "bigint"
console.log(typeof function() {}); // "function" (но технически это объект)

В Node.js, особенно при работе с API или базами данных, важно явно контролировать типы, используя строгое сравнение (===) и преобразования (например, Number(), String()).

Ответ 18+ 🔞

О, слушай, давай разберем эту дичь с типами в JavaScript, а то народ путается, как маньяк в тёмном подъезде. В общем, в языке этих типов всего восемь, и они делятся на две неравные команды, как в плохом сериале: примитивы и объекты.

Первая команда — примитивы, их семь штук. Они передаются по значению, то есть если ты скопируешь переменную, то получишь две независимые копии, а не одну на двоих. Как будто у тебя два одинаковых носка, но если один протрёшь, второй целым останется.

  1. number — это просто числа, любые. Целые, дробные, плюс ещё три особых гостя: Infinity, -Infinity и этот ёбаный NaN, который сам по себе — число, но ведёт себя как маньяк-неудачник.
  2. bigint — для тех, кому мало обычных чисел. Нужно работать с цифрами длиннее, чем очередь в МФЦ? Вот тебе 9007199254740991n. Добавляй n в конце и спи спокойно.
  3. string — строка, она же текст. Всё, что в кавычках, апострофах или косых кавычках.
  4. booleantrue или false. Всё просто, как два пальца об асфальт.
  5. undefined — значение по умолчанию для всего, что ты не потрудился инициализировать. Переменная объявлена, но в ней нихуя нет? Вот тебе undefined.
  6. null — специальное значение, которое означает «ничего», «пусто» или «значение неизвестно». Это как сознательно оставить поле пустым, а не просто забыть его заполнить.
  7. symbol — уникальный и неизменяемый значок. Используется, когда нужно сделать ключ для объекта, который точно ни с кем не перепутается. Хитрая жопа, но иногда нужная.

А теперь вторая команда — объектный тип, он один, но ёпта, какой всеобъемлющий!

  1. object — это уже коллекция свойств, по сути, почти всё остальное. Массивы, функции, даты — всё это под капотом объекты. Они передаются по ссылке, то есть если ты скопируешь переменную, то получишь две ссылки на одну и ту же сущность. Изменяешь в одном месте — меняется везде. Доверия к этому механизму — ебать ноль, поэтому будь осторожен.

Ну а теперь самое весёлое — проверка типа через typeof. Тут, блядь, настоящий ёперный театр начинается, один только null чего стоит!

console.log(typeof 42); // "number" — тут всё ок
console.log(typeof 'Hello'); // "string" — и тут понятно
console.log(typeof true); // "boolean" — без сюрпризов
console.log(typeof undefined); // "undefined" — логично
console.log(typeof null); // "object" — ВОТ, БЛЯДЬ! Исторический косяк языка, с которым все смирились. Ни хуя себе, да? `null` — это объект, ёб твою мать.
console.log(typeof {}); // "object" — да, так и есть
console.log(typeof []); // "object" — ага, массив — тоже объект. Не жди тут "array".
console.log(typeof Symbol('id')); // "symbol" — ок
console.log(typeof 10n); // "bigint" — ок
console.log(typeof function() {}); // "function" — вот тут отдельная приколюха. Технически функция — это объект, но `typeof` из жалости выводит "function".

В Node.js, особенно когда лезешь в API или базы данных, эта вся типовая ебля вылезает боком. Поэтому золотое правило: используй строгое сравнение (===) и не стесняйся явно преобразовывать типы через Number(), String() и прочие штуки. А то получишь NaN там, где ждал цифру, и будешь потом охуевать, почему всё накрылось медным тазом.

Видео-ответы