Какие типы данных есть в JavaScript?angular-4

Примитивные типы данных

Эти типы передаются по значению и являются неизменяемыми (immutable).

1. number

  • Числовой тип, включая целые, дробные и специальные значения.
let integer = 42;
let float = 3.14;
let infinity = Infinity;
let nan = NaN; // Особый случай: тип number, но "Not a Number"

2. string

  • Строки (UTF-16). Могут быть в одинарных, двойных или обратных кавычках.
let name = "Alice";
let template = `Hello ${name}!`; // Шаблонные строки (ES6)

3. boolean

  • Логический тип: true или false.
let isActive = true;
let isAdmin = false;

4. undefined

  • Значение по умолчанию для неинициализированных переменных.
let x;
console.log(x); // undefined

5. null

  • Специальное значение "ничего". Важно: typeof null возвращает "object" (историческая ошибка JS).
let empty = null;

6. symbol

  • Уникальный идентификатор. Используется для создания скрытых свойств объектов.
const id = Symbol("uniqueId");

7. bigint

  • Для работы с очень большими целыми числами (больше 2^53 - 1).
const bigNum = 9007199254740991n;

Ссылочный тип

object

  • Коллекции свойств (ключ-значение). Включает:
    • Обычные объекты: { key: "value" }
    • Массивы: [1, 2, 3]
    • Функции: function() {}
    • Даты, Регулярные выражения и др.
let user = { name: "Bob", age: 30 };
let colors = ["red", "green"];
function greet() { console.log("Hi!"); }

Важно: Объекты передаются по ссылке:

let a = { value: 10 };
let b = a; // Теперь b ссылается на тот же объект
a.value = 20;
console.log(b.value); // 20

Особенности проверки типов

  • Оператор typeof:

    console.log(typeof 42); // "number"
    console.log(typeof []); // "object" (а не "array")
    console.log(typeof null); // "object" (исторический баг)
    
  • Метод Array.isArray() для проверки массивов:

    console.log(Array.isArray([])); // true
    

Резюмируем

  1. 7 примитивов: number, string, boolean, null, undefined, symbol, bigint.
  2. 1 ссылочный тип: object (включая массивы, функции и др.).
  3. Особенности:
    • null ошибочно определяется как "object".
    • Объекты передаются по ссылке, примитивы — по значению.
    • Для точной проверки типов используйте комбинацию typeof, instanceof и Array.isArray().

P.S. В TypeScript эти типы расширяются (any, unknown, enum и др.), но в runtime остаются только перечисленные выше.