JavaScript. Подробное руководство, 6-е издание (Флэнаган) - страница 47

. Некоторые особенности преобразования значений в числа могут показаться странными: значение >true преобразуется в число 1, а значение >false и пустая строка "" преобразуются в 0.

Преобразование простых типов в объекты также выполняется достаточно просто: значения простых типов преобразуются в соответствующие объекты-обертки (раздел 3.6), как если бы вызывался конструктор >String(), Number() или >Boolean().

Преобразование объектов в простые типы выполняется значительно сложнее и является темой обсуждения раздела 3.8.3.


3.8.1. Преобразования и равенство

Благодаря гибкости преобразований типов в JavaScript оператор равенства == также гибко определяет равенство значений. Например, все следующие сравнения возвращают true:


>null == undefined // Эти два значения считаются равными.

>"0" == 0          // Перед сравнением строка преобразуется в число.

>0 == false        // Перед сравнением логич. значение преобразуется в число.

>"0" == false      // Перед сравнением оба операнда преобразуются в числа.


В разделе 4.9.1 четко описывается, какие преобразования выполняет оператор >==, чтобы определить, являются ли два значения равными, и в этом же разделе описывается оператор идентичности >===, который не выполняет никаких преобразований перед сравнением.

Имейте в виду, что возможность преобразования одного значения в другое не означает равенства этих двух значений. Если, например, в логическом контексте используется значение >undefined, оно будет преобразовано в значение >false. Но это не означает, что >undefined == false. Операторы и инструкции JavaScript ожидают получить значения определенных типов и выполняют преобразования в эти типы. Инструкция>if преобразует значение >undefined в >false, но оператор >== никогда не пытается преобразовать свои операнды в логические значения.

3.8.2. Явные преобразования

Несмотря на то что многие преобразования типов JavaScript выполняет автоматически, иногда может оказаться необходимым выполнить преобразование явно или окажется предпочтительным выполнить явное преобразование, чтобы обеспечить ясность программного кода.

Простейший способ выполнить преобразование типа явно заключается в использовании функций >Boolean(), Number(), String() и >Object(). Мы уже видели, как эти функции используются в роли конструкторов объектов-оберток (раздел 3.6). При вызове без оператора >new они действуют как функции преобразования и выполняют преобразования, перечисленные в табл. 3.2:


>Number("3") // => 3

>String(false) // => "false" или можно использовать false.toString()

>Boolean([]) // => true