FrontTalks #1: Анатолий Смилик – Приведение типов в JavaScript
Давайте вспомним и повторим, как JavaScript гибко преобразует один тип в другой. Освежать эту тему в памяти нужно регулярно, чтобы не искать причин, почему код работает не так как ожидалось.
объекты 1. число (к этому же типу относятся специальные числовые значения: NaN, Infinity, -Infinity) 2. строка 3. логический 4. null 5. undefined любое значение, которое не относится к простому типу. JavaScript выполняет автоматическое приведение к одному из типов: 1. числу 2. строке 3. логическому 4. объекту
операнд приводится к числу либо к NaN + приоритет - конкатенация строк 1. объект приводится к простому значению 2. есть строковый операнд? приведение к строкам и конкатенация 3. иначе приведение к числам => сложение
разные типы => false • хотя бы один операнд NaN => false • null === null, undefined === undefined => true • true === true, false === false => true • числа с одинаковым значением (0 === -0) => true • строки содержат одни и те 16-битные значения в одинаковых позициях => true • ссылки на один и тот объект => true == (равно) • одинаковые типы => проверка на идентичность • null == undefined => true • 'строка' == число => Number('строка') => сравнение чисел • true => 1, false => 0 => сравнение чисел • объект == число || строка => объект приводится к простому типу: первым используется метод valueOf(), кроме Date • все другие комбинации не равны. !== (не идентично) инверсия === != (не равно) инверсия ==
4. <= приоритет - сравнение чисел • объект => простое значение: 1) valueOf() 2) toString() • оба операнда строки => сравнение строк • хотя бы один операнд - число => приведение к числам => сравнение чисел. Если хотя бы один из операндов NaN => false
String() и Object() 2. методы toString, toFixed, toExponential, toPrecision() объекта Number приводят к строке 3. функции parseInt(), parseFloat() приводят к числам 4. Унарный + приводит значение к числу 5. Сложение + приводит к строке, если один из операторов строка 6. Двойной оператор !! приводит к логическому значению