Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FrontTalks #1: Анатолий Смилик – Приведение тип...

FrontTalks #1: Анатолий Смилик – Приведение типов в JavaScript

Давайте вспомним и повторим, как JavaScript гибко преобразует один тип в другой. Освежать эту тему в памяти нужно регулярно, чтобы не искать причин, почему код работает не так как ожидалось.

Avatar for FrontTalks Conference

FrontTalks Conference

February 16, 2013

More Decks by FrontTalks Conference

Other Decks in Programming

Transcript

  1. JavaScript - язык с динамической, слабой, неявной типизацией. простые типы

    объекты 1. число (к этому же типу относятся специальные числовые значения: NaN, Infinity, -Infinity) 2. строка 3. логический 4. null 5. undefined любое значение, которое не относится к простому типу. JavaScript выполняет автоматическое приведение к одному из типов: 1. числу 2. строке 3. логическому 4. объекту
  2. Приведение к строке значение результат undefined "undefined" null "null" true

    "true" false "false" 0 "0" -0 "0" NaN "NaN" Infinity "Infinity" -Infinity "-Infinity" 83(конечное число, не 0) "83"
  3. Приведение к логическому типу значение результат undefined false null false

    "" (пустая строка) false NaN false 0 false -0 false "0" (непустая строка) true Infinity true -Infinity true 83 (конечное число, не 0) true
  4. Приведение к числу значение результат null 0 false 0 "

    " (пустая строка) 0 true 1 " \n 8.3 \t " (непустая строка, число) 8.3 "ноль" (непустая строка, не число) NaN undefined NaN
  5. Приведение к объекту значение результат true new Boolean(true) "string" new

    String("string") 83 new Number(83) undefined исключение TypeError null исключение TypeError
  6. значение результат { } (любой объект) 1. toString() 2. valueOf()

    3. исключение TypeError [ ] (пустой массив) "" [83] ( 1 числовой элемент) "83" ["maks", 29] (любой другой массив) "maks,29" function(){ } (любая функция) "function f(){}" Date "Sat Feb 16 2013 00:45:14 GMT+0500 (Уральское время (зима))" Приведение объектов к строке
  7. Приведение объектов к числу значение результат { } (любой объект)

    1. valueOf() 2. toString() 3. исключение TypeError [ ] (пустой массив) 0 [83] ( 1 числовой элемент) 83 Date 1360957859721 (число милисекунд с 01.01.1970) ['any'] (любой другой массив) NaN function(){ } (любая функция) NaN
  8. Арифметические операторы оператор правила -, /, * любой не числовой

    операнд приводится к числу либо к NaN + приоритет - конкатенация строк 1. объект приводится к простому значению 2. есть строковый операнд? приведение к строкам и конкатенация 3. иначе приведение к числам => сложение
  9. Операторы равенства оператор правила === (строгое равно или идентичность) •

    разные типы => 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 • все другие комбинации не равны. !== (не идентично) инверсия === != (не равно) инверсия ==
  10. Операторы сравнения оператор правила 1. > 2. < 3. >=

    4. <= приоритет - сравнение чисел • объект => простое значение: 1) valueOf() 2) toString() • оба операнда строки => сравнение строк • хотя бы один операнд - число => приведение к числам => сравнение чисел. Если хотя бы один из операндов NaN => false
  11. Expecto Patronum или явное приведение типов 1. функции Boolean(), Number(),

    String() и Object() 2. методы toString, toFixed, toExponential, toPrecision() объекта Number приводят к строке 3. функции parseInt(), parseFloat() приводят к числам 4. Унарный + приводит значение к числу 5. Сложение + приводит к строке, если один из операторов строка 6. Двойной оператор !! приводит к логическому значению