← Назад к вопросам

Как примитив преобразовать в другой тип данных?

2.2 Middle🔥 133 комментариев
#JavaScript Core

Комментарии (3)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как примитив преобразовать в другой тип данных?

Типы данных в JavaScript

Примитивы: string, number, boolean, null, undefined, Symbol, BigInt

Преобразование строк и чисел

// === СТРОКА -> ЧИСЛО ===

// Способ 1: parseInt (целое число, автоматически игнорирует нецифры)
parseInt('42'); // 42
parseInt('42.99'); // 42 (обрезает)
parseInt('0xFF'); // 255 (шестнадцатеричная)
parseInt('101', 2); // 5 (двоичная система)

// Способ 2: parseFloat (с десятичной частью)
parseFloat('3.14'); // 3.14
parseFloat('3.14abc'); // 3.14

// Способ 3: Number() (переводит весь строк)
Number('42'); // 42
Number('3.14'); // 3.14
Number(''); // 0 (пустая строка -> 0)
Number('hello'); // NaN (не число)
Number(true); // 1
Number(false); // 0

// Способ 4: Унарный плюс (самый быстрый)
+'42'; // 42
+'3.14'; // 3.14
+true; // 1
+false; // 0

// === ЧИСЛО -> СТРОКА ===

// Способ 1: toString()
(42).toString(); // '42'
(3.14).toString(); // '3.14'
(255).toString(16); // 'ff' (шестнадцатеричная)
(5).toString(2); // '101' (двоичная)

// Способ 2: String()
String(42); // '42'
String(true); // 'true'
String(null); // 'null'
String(undefined); // 'undefined'

// Способ 3: Шаблонные строки (template literals)
`${42}`; // '42'
`Price: ${3.14}`; // 'Price: 3.14'

// Способ 4: Конкатенация со строкой
42 + ''; // '42'
3.14 + 'px'; // '3.14px'

// === ЧИСЛО -> СТРОКА С ФОРМАТИРОВАНИЕМ ===
const num = 3.14159;

num.toFixed(2); // '3.14' (фиксированное количество десятичных)
num.toPrecision(3); // '3.14' (всего 3 значащих цифры)
num.toExponential(2); // '3.14e+0' (научная нотация)

// Локализованное число
(1234.5).toLocaleString('ru-RU'); // '1 234,5'
(1234.5).toLocaleString('en-US'); // '1,234.5'

Преобразование в boolean

// === ЛЮБОЙ ТИП -> BOOLEAN ===

// Способ 1: Boolean()
Boolean(1); // true
Boolean(0); // false
Boolean(''); // false
Boolean('hello'); // true
Boolean(null); // false
Boolean(undefined); // false
Boolean([]); // true (массив - объект, объекты всегда true)
Boolean({}); // true

// Способ 2: Двойное отрицание (!!)
!!'hello'; // true
!!0; // false
!!null; // false

// Способ 3: Логический оператор OR (||)
0 || 'default'; // 'default'
null || 'default'; // 'default'
'value' || 'default'; // 'value'

// Способ 4: Nullish coalescing (??)
null ?? 'default'; // 'default'
undefined ?? 'default'; // 'default'
0 ?? 'default'; // 0 (потому что 0 - не null/undefined)
'' ?? 'default'; // '' (потому что '' - не null/undefined)

// === FALSY vs TRUTHY VALUES ===
const falsy = [0, '', false, null, undefined, NaN];
const truthy = [1, 'text', true, [], {}, -1];

falsy.forEach(val => console.log(Boolean(val))); // всё false
truthy.forEach(val => console.log(Boolean(val))); // всё true

Преобразование объектов и массивов

// === ОБЪЕКТ -> СТРОКА ===

const obj = { name: 'John', age: 30 };

// Способ 1: JSON.stringify()
JSON.stringify(obj); // '{"name":"John","age":30}'
JSON.stringify(obj, null, 2); // с отступами

// Способ 2: toString() (плохой результат)
obj.toString(); // '[object Object]'

// === МАССИВ -> СТРОКА ===

const arr = [1, 2, 3];

arr.toString(); // '1,2,3'
arr.join('-'); // '1-2-3'
JSON.stringify(arr); // '[1,2,3]'

// === СТРОКА -> МАССИВ ===

'hello'.split(''); // ['h','e','l','l','o']
'a,b,c'.split(','); // ['a','b','c']
Array.from('hello'); // ['h','e','l','l','o']
[...'hello']; // ['h','e','l','l','o']

// === СТРОКА -> ОБЪЕКТ ===

// JSON.parse() (обратно JSON.stringify)
JSON.parse('{"name":"John","age":30}'); // { name: 'John', age: 30 }

// URLSearchParams для query строк
const params = new URLSearchParams('name=John&age=30');
Object.fromEntries(params); // { name: 'John', age: '30' }

// === OBJETO -> МАССИВ ===

const user = { name: 'John', age: 30 };

Object.keys(user); // ['name', 'age']
Object.values(user); // ['John', 30]
Object.entries(user); // [['name', 'John'], ['age', 30]]

Типы данных Date

// === NUMBER -> DATE ===

// Способ 1: new Date(timestamp в миллисекундах)
new Date(1609459200000); // 2021-01-01T00:00:00.000Z

// Способ 2: new Date(строка)
new Date('2021-01-01'); // 2021-01-01T00:00:00.000Z

// === DATE -> NUMBER (миллисекунды с 1970) ===

const date = new Date('2021-01-01');
date.getTime(); // 1609459200000
date.valueOf(); // 1609459200000
+date; // 1609459200000

// === DATE -> STRING ===

date.toString(); // 'Fri Jan 01 2021 00:00:00 GMT+0000'
date.toISOString(); // '2021-01-01T00:00:00.000Z'
date.toLocaleDateString(); // '1/1/2021'
date.toLocaleDateString('ru-RU'); // '1.1.2021'

Типобезопасное преобразование

// === ФУНКЦИИ-КОНВЕРТЕРЫ С ПРОВЕРКОЙ ===

function safeToNumber(value) {
  const num = Number(value);
  if (isNaN(num)) {
    throw new Error(`Cannot convert "${value}" to number`);
  }
  return num;
}

function safeParseInt(value, radix = 10) {
  const parsed = parseInt(value, radix);
  if (isNaN(parsed)) {
    throw new Error(`Cannot parse "${value}" as integer`);
  }
  return parsed;
}

function safeToBoolean(value) {
  if (value === null || value === undefined) return false;
  if (typeof value === 'boolean') return value;
  if (typeof value === 'string') return value.toLowerCase() === 'true';
  return Boolean(value);
}

// === TypeScript: Строгая типизация ===

interface Convertible {
  toNumber(): number;
  toString(): string;
  toBoolean(): boolean;
}

class Value implements Convertible {
  constructor(private value: any) {}

  toNumber(): number {
    const num = Number(this.value);
    if (isNaN(num)) throw new Error('Invalid number');
    return num;
  }

  toString(): string {
    return String(this.value);
  }

  toBoolean(): boolean {
    return Boolean(this.value);
  }
}

const val = new Value('42');
console.log(val.toNumber()); // 42
console.log(val.toString()); // '42'
console.log(val.toBoolean()); // true