Тип данных — это категоризация аргументов операций над значениями, как правило, охватывающая как
поведение, так и представление.
Преобразование типов это процесс конвертации значения из одного типа в другой (например, строки в
число, объекта к булеву значению и т.д.).
Любой тип данных, будь то примитив или объект, может быть преобразован в другой тип.
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);
2. если в объекте явно присутствует метод toString, который возвращает примитив, то именно он
используется для преобразования (а не возвращает строку "[object Object]"):
const obj = {
toString: function () { return "Пользователь " + "Alex"; },
};
console.log(obj.toString()); // Пользователь Alex
console.log(String(obj)); // Пользователь Alex
Примеры: +"123";
Number(123); // 123 123 != "456";
Number("123"); // 123 4 > "5";
Number("12s"); // NaN 5 / null;
Замечание:
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
Примеры:
"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
Как и в случае с примитивами, объект может быть преобразован всего тремя способами (численным,
строковым, булевым):
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/