Типы данных: примитивы 1, 2, 3

JavaScript имеет семь примитивных типов данных: number, string, boolean, null, undefined, symbol и bigint — они передаются по значению и неизменяемы.

Зачем нужно

Понимание системы типов — фундамент для предотвращения неочевидных багов с приведением типов, сравнением и операторами. JavaScript — динамически типизированный язык, где тип значения определяется в рантайме, поэтому знание правил coercion критично для написания предсказуемого кода.

Где используется

  • Сравнение значений: == vs ===
  • Арифметика и конкатенация строк
  • Условные проверки (truthy/falsy)
  • Работа с API и JSON (число/строка/boolean)

Основной контент

Примитивные типы

// number — IEEE 754, включает NaN и Infinity
const n = 42;
const float = 3.14;
const notNum = NaN;        // Not a Number
const inf = Infinity;

console.log(typeof n);     // 'number'
console.log(isNaN(notNum)); // true

// string
const str = 'Hello';
const tmpl = `Привет, ${str}`;
console.log(typeof str);   // 'string'

// boolean
const flag = true;
console.log(typeof flag);  // 'boolean'

// null и undefined
console.log(typeof null);      // 'object' (историческая ошибка!)
console.log(typeof undefined); // 'undefined'

// symbol (уникальный идентификатор)
const sym = Symbol('desc');
console.log(typeof sym);   // 'symbol'

// bigint (целые числа произвольной точности)
const big = 9007199254740991n;
console.log(typeof big);   // 'bigint'

Truthy и Falsy значения

// Falsy: false, 0, '', null, undefined, NaN, 0n
if (!0)         console.log('0 falsy');
if (!null)      console.log('null falsy');
if (!undefined) console.log('undefined falsy');
if (!'')        console.log('"" falsy');
if (!NaN)       console.log('NaN falsy');

// Всё остальное truthy, включая   и {}
if ()  console.log(' truthy');
if ({})  console.log('{} truthy');

Приведение типов (Coercion)

// Неявное при ==
console.log(0 == false);   // true (оба → 0)
console.log('' == false);  // true
console.log(null == undefined); // true (особый случай)

// Строгое === без приведения
console.log(0 === false);  // false
console.log('' === false); // false

// Конкатенация vs сложение
console.log('2' + 2);   // '22' (строка)
console.log('2' - 2);   // 0   (число)
console.log(+'3');       // 3   (явное приведение)
console.log(Number(''));  // 0
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN

typeof и instanceof

// typeof для примитивов
console.log(typeof 42);          // 'number'
console.log(typeof 'str');        // 'string'
console.log(typeof true);         // 'boolean'
console.log(typeof undefined);    // 'undefined'
console.log(typeof null);         // 'object' (!!)
console.log(typeof Symbol);     // 'symbol'

// instanceof для объектов
console.log( instanceof Array); // true
console.log({} instanceof Object); // true

Частые ошибки

  • typeof null === 'object' — историческая ошибка спецификации. Для проверки на null используйте value === null.
  • Сравнение с == — неявное приведение типов даёт неочевидные результаты. Почти всегда используйте ===.
  • NaN !== NaN — единственное значение, не равное самому себе. Используйте Number.isNaN(value) вместо value === NaN.

Связанные темы

Ресурсы