Вы находитесь на странице: 1из 7

Преобразование типов в JavaScript

Тип данных — это категоризация аргументов операций над значениями, как правило, охватывающая как
поведение, так и представление.
Преобразование типов это процесс конвертации значения из одного типа в другой (например, строки в
число, объекта к булеву значению и т.д.).

Любой тип данных, будь то примитив или объект, может быть преобразован в другой тип.

В JavaScript есть 3 типа преобразования:


1. строковое;
2. числовое;
3. логическое.

1. Строковое:
• явное - функция String(value), метод value.toString();
• неявное - конкатенация со строкой (с помощью бинарного + ), функция alert, и т.д.
2. Числовое:
• явное - функция Number(value);
• неявное:
1. арифметические операции (кроме бинарного +);
2. нестрогое сравнение разных типов (==, включая !=);
3. унарный оператор + (например, +’58’, +true и т.п.).
3. Логические преобразования:
• явное - функция Boolean(value) (Boolean(‘test me’) → true);
• неявное - в логическом контексте if (val) { … } или при применении логических операторов (||,
&&, !).
СКАЧАНО С WWW.MEGASLIV.BIZ - ПРИСОЕДИНЯЙСЯ!
Преобразование типов в JS
Строковое преобразование типов
1. явное :
• функция String(value) : String(34.56);
• метод toString() : value = (34.5678).toString();
2. неявное :
• конкатенация со строкой (с помощью бинарного + ) : value = "Это строка " + 34.56;
• функция alert, метод toFixed() и т.п. : value = (34.5678).toFixed(2);

Особенности строкового преобразования:


1. строковое представление пользовательского объекта (в общем случае) - строка ‘[object Object]’:
console.log(String(myObject)); // [object Object]
console.log(myObject.toString()); // [object Object]

2. если в объекте явно присутствует метод toString, который возвращает примитив, то именно он
используется для преобразования (а не возвращает строку "[object Object]"):
const obj = {
toString: function () { return "Пользователь " + "Alex"; },
};
console.log(obj.toString()); // Пользователь Alex
console.log(String(obj)); // Пользователь Alex

3. метод toString для функции выводит её код:


function myFunc() {
return "Пользователь " + "Alex";
}
console.log(myFunc.toString()); // function myFunc() { return "Пользователь " + "Alex";}
console.log(String(myFunc)); // function myFunc() { return "Пользователь " + "Alex";}
Преобразование типов в JS
Числовое преобразование типов
1. явное :
• функция Number(value) : Number (“34.56”);
2. неявное :
• арифметические операции (кроме бинарного +);
• нестрогое сравнение разных типов (< , > , ==, включая !=);
• унарный оператор + (например, +’58’, +true и т.п.);
• функции parseInt() и parseFloat().

Особенности числового преобразования:


1. true → 1;
2. false → 0;
ВАЖНО!
3. null → 0;
NaN не равен ничему, даже самому себе.
4. undefined → NaN;
5. “text” → NaN;
6. "" (пустая строка) → 0.

Примеры: +"123";
Number(123); // 123 123 != "456";
Number("123"); // 123 4 > "5";
Number("12s"); // NaN 5 / null;

parseInt("200px"); // 200 (для целых чисел)


parseFloat("200.456px"); // 200.456 (для дробных чисел)
// символы, не являющиеся цифрами, отсекаются (но только не в начале строки!)
Преобразование типов в JS
Булево (логическое) преобразование типов
1. явное:
• функция Boolean(value);
2. неявное:
• в логическом контексте if (val) { … } или
• при применении логических операторов ( || (ИЛИ), && (И), ! (НЕ) ).

Особенности логического (булева) преобразования:


1. Boolean("", null, undefined, NaN, false, 0, -0) → false;
2. Boolean(2016, 'string', {}, [], любой объект или массив, даже пустые) → true.

Замечание:
Boolean можно заменить двойным отрицанием - !!, которое также преобразует значения к
логическому типу.

Примеры:
value = Boolean(undefined);
console.log(value); // false - для NULL, 0, undefined
console.log(typeof value); // boolean
value = Boolean({});
console.log(value); // true - для строки, числа, любого объекта или массива (даже пустых)
value = Boolean(14);
console.log(value); // true
console.log(!!"non-empty string"); // true
console.log(!!null); // false
Преобразование типов в JS

Преобразования типов при сравнении примитивов


При сравнении примитивов (кроме строгих сравнений !== и ===):
1. всё приводится к числу, а потом
2. сравнивается.

Примеры:
"12" > 2; // true (12 > 2)
"string" > 2; // false (сравниваются NaN и 2)
true < 2; // true (1 < 2)
false == 0; // true (0 == 0)

Исключения:
• "12" > "2"; // false (посимвольное сравнение: первый символ первой строки "1" меньше,
// чем первый символ второй строки - "2")
• undefined == false; // false (сравниваются NaN и 0, а NaN не равен ничему, даже самому себе)
• null == false; // false (null может равняться только null или undefined, и ничему другому)
null == undefined; // true
null == null; // true
Преобразование типов в JS

Преобразование сложных типов в JS


При преобразовании сложных типов данных (объектов), движок сначала приводит их к примитивным
значениям, а уже потом выполняет финальное преобразование.

Как и в случае с примитивами, объект может быть преобразован всего тремя способами (численным,
строковым, булевым):
1. При строковом преобразовании — сначала происходит вызов toString(), а уже потом valueOf().
2. При численном преобразовании сначала вызывается метод valueOf(), а уже затем toString().
3. При логическом (булевом) преобразовании любое не примитивное значение всегда приводится к
true, включая пустые объекты и массивы.
Замечания:
1. Введенный разработчиком метод toString() объекта не обязан возвращать именно строку, его
результат может быть любого примитивного типа (например, это может быть число).
2. У большинства встроенных объектов valueOf() отсутствует, реализован только toString(). Исключение:
встроенный объект Date (реализованы и toString() , и valueOf() ).

Примеры:
[] + [1] // "1" (""+"1")
1 - [1] // 0 (сначала строковое, затем - неявное числовое)
[1] + [1] // "11" ("1" + "1")
{} + {} // "[object Object][object Object]"
{} - {} // NaN (сначала строковое, затем - неявное числовое)
Преобразование типов в JS

Дополнительные материалы:
1. Преобразование типов в JavaScript
2. Про приведение типов в JS и магию.

https://flagman.top/