Какие знаешь типы данных в JS

Ответ

В JavaScript есть 8 основных типов данных:

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

    • number - целые и дробные числа (например, 42, 3.14)
    • string - строки ('hello', "world")
    • boolean - логический тип (true, false)
    • null - специальное значение "ничего"
    • undefined - значение не определено
    • symbol - уникальные идентификаторы (ES6)
    • bigint - для больших чисел (ES2020)
  2. Объектный тип (передается по ссылке):

    • object - коллекции свойств, включая массивы ([]), функции (function() {}), даты (new Date()), регулярные выражения (/pattern/) и другие.

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

typeof 42; // "number"
typeof 'text'; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof Symbol(); // "symbol"
typeof 123n; // "bigint"
typeof {}; // "object"
typeof []; // "object" (особенность typeof)
typeof null; // "object" (известный баг JS)

Ответ 18+ 🔞

А, слушай, вот эта хуйня с типами в JavaScript — это вообще отдельный цирк с конями, блядь. Сидишь такой, пишешь код, а потом бац — и нихуя не работает. А почему? Потому что типы, сука, перепутал! Так что давай разбираться, пока не поздно.

Вот есть у нас восемь главных персонажей в этой пьесе, и делятся они на две банды, как в плохом боевике.

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

  • number — ну, цифры, блядь. И целые, и с запятой. 42, 3.14, -10. Всё просто.
  • string — это текст, строки. В кавычках, апострофах или косых, хуй знает каких, главное — чтоб буквы. 'привет', "мир".
  • boolean — логика, ёпта. Либо true (правда), либо false (ложь, пиздёж). Третьего не дано, как в хорошем тоталитарном государстве.
  • null — это специальное значение, которое кричит: «Тут нихуя нет! Я специально тут нихуя не положил!».
  • undefined — а это уже не специально. Это когда ты пришёл в холодильник, а там пусто, потому что ты забыл купить еды. Значение не определено, ваще.
  • symbol — это как уникальный татуированный номер на зеке. Появился в ES6, чтобы создавать свойства в объектах, которые точно ни с кем не спутаешь.
  • bigint — это для тех, у кого цифры не влезают в обычный number. Типа, «ой, у меня тут триллион долларов, а у вас тип маленький». ES2020 принёс, пользуйтесь.

Вторая банда — один, но матерый. object. Этот передаётся по ссылке. То есть, если ты его скопируешь, то скопируешь только адресок, где он живёт. Придёшь к нему в гости — а там уже другой чувак мебель переставил, и у тебя в оригинальной переменной тоже пиздец. Сюда входят массивы [], функции function() {}, даты, регулярки — все эти хитрожопые сущности.

А теперь смотри, какой пиздец начинается, когда ты пытаешься узнать, кто есть кто, через typeof. Это ж отдельный трэш-концерт!

typeof 42; // "number" — ок, логично.
typeof 'text'; // "string" — да, ебать, текст.
typeof true; // "boolean" — ну ладно.
typeof undefined; // "undefined" — прям честно сказал, мол, я не определён, идите нахуй.
typeof Symbol(); // "symbol" — работает.
typeof 123n; // "bigint" — работает.
typeof {}; // "object" — ну, объект он и есть объект.
typeof []; // "object" — ВОТ ТУТ-ТО И ПИЗДЕЦ! Массив — тоже объект! Особенность такая, блядь.
typeof null; // "object" — А ЭТО ВООБЩЕ ИЗВЕСТНЫЙ БАГ, КОТОРЫЙ УЖЕ НИКОГДА НЕ ПОЧИНЯТ! Джаваскрипт, сука, с самого начала так затупил, что теперь все с этим живут. null — это не объект, ёпта! Это null!

Вот и вся история. Запомни эту таблицу, а то будешь как тот Герасим — мычать «муму», а тебе в ответ «object», и нихуя не поймёшь, в чём дело.