Типы данных: примитивы 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.
Связанные темы
- _MOC JavaScript
- Hoisting -- поднятие объявлений
- Optional chaining и nullish coalescing
- JS Symbol и итераторы