Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Примитивные типы данных в JavaScript
В JavaScript есть 7 примитивных типов данных (primitive types). Это значения, которые хранятся напрямую, а не по ссылке. Давайте разберём каждый.
1. String — Строки текста
const name = 'Alice';
const greeting = "Hello, World!";
const template = `Hello, ${name}!`;
typeof name; // 'string'
Строки неизменяемы. При изменении создаётся новая строка.
2. Number — Числа
const integer = 42;
const decimal = 3.14;
const negative = -10;
const infinity = Infinity;
const notANumber = NaN; // Not a Number
typeof 42; // 'number'
typeof NaN; // 'number' (парадокс!)
Все числа хранятся как 64-битные числа с плавающей точкой (IEEE 754).
3. BigInt — Большие целые числа
const big = 1234567890123456789n;
const alsoLarge = BigInt('9007199254740991');
typeof big; // 'bigint'
// Обычный Number имеет лимит
Number.MAX_SAFE_INTEGER; // 9007199254740991
// BigInt может быть больше
Больше используется для криптографии и больших вычислений.
4. Boolean — Логические значения
const isActive = true;
const isCompleted = false;
typeof true; // 'boolean'
// Всё остальное преобразуется к boolean
Boolean(0); // false
Boolean(''); // false
Boolean(null); // false
Boolean(undefined); // false
Boolean(NaN); // false
Boolean(1); // true
Boolean('hello'); // true
Boolean([]); // true
5. Undefined — Неопределённое значение
let x;
console.log(x); // undefined
function test() {
// нет return
}
test(); // undefined
typeof undefined; // 'undefined'
Обычно значит переменная объявлена, но значение не присвоено.
6. Null — Пустое значение
const empty = null;
typeof null; // 'object' (исторический баг!)
// null означает "намеренное отсутствие значения"
// в отличие от undefined
Это единственный примитивный тип, который имеет typeof 'object'. Это известный баг в JavaScript.
7. Symbol — Уникальный идентификатор
const id1 = Symbol('user');
const id2 = Symbol('user');
id1 === id2; // false — каждый Symbol уникален
typeof Symbol('id'); // 'symbol'
// Практическое использование
const privateData = Symbol('private');
const obj = {
[privateData]: 'secret',
public: 'visible'
};
obj[privateData]; // 'secret'
Object.keys(obj); // ['public'] — privateData скрыт
Примитивы vs Объекты
// Примитив — хранится значение
let a = 10;
let b = a;
b = 20;
console.log(a); // 10 — a не изменилась
// Объект — хранится ссылка
let obj1 = { value: 10 };
let obj2 = obj1;
obj2.value = 20;
console.log(obj1.value); // 20 — obj1 изменилась
Упаковка примитивов (Boxing)
JavaScript автоматически преобразует примитивы в объекты:
const str = 'hello';
str.length; // 5 — JS создал временный объект String
const num = 42;
num.toFixed(2); // '42.00' — JS создал временный объект Number
const bool = true;
bool.toString(); // 'true' — JS создал временный объект Boolean
Таблица типов
| Тип | typeof | Пример | Описание |
|---|---|---|---|
| String | 'string' | 'hello' | Текст |
| Number | 'number' | 42, 3.14, NaN | Числа |
| BigInt | 'bigint' | 42n | Большие числа |
| Boolean | 'boolean' | true, false | Логика |
| Undefined | 'undefined' | undefined | Не определено |
| Null | 'object' | null | Пусто |
| Symbol | 'symbol' | Symbol('id') | Уникальный ID |
Проверка типов
typeof 42; // 'number'
typeof 'hello'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
// Для null нужна специальная проверка
value === null; // правильно
typeof null === 'object'; // true, но это баг
// instanceof для объектов
[] instanceof Array; // true
{} instanceof Object; // true
Практическое применение
// Функция принимает разные типы
function process(data) {
if (typeof data === 'string') {
return data.toUpperCase();
} else if (typeof data === 'number') {
return data * 2;
} else if (typeof data === 'boolean') {
return data ? 'yes' : 'no';
}
return 'unknown';
}
Итог
Примитивные типы — это основа JavaScript. Важно понимать различия между ними и как браузер с ними работает. На интервью часто спрашивают об упаковке примитивов и разнице между null и undefined.