Ответ
В JavaScript есть 8 основных типов данных:
-
Примитивные типы (передаются по значению):
number- целые и дробные числа (например,42,3.14)string- строки ('hello',"world")boolean- логический тип (true,false)null- специальное значение "ничего"undefined- значение не определеноsymbol- уникальные идентификаторы (ES6)bigint- для больших чисел (ES2020)
-
Объектный тип (передается по ссылке):
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», и нихуя не поймёшь, в чём дело.