Определенные операторы в языке JavaScript неявно выполняют преобразования и иногда могут использоваться для преобразования типов. Если один из операндов оператора
<b>+</b>
является строкой, то другой операнд также преобразуется в строку. Унарный оператор
<b>+</b>
преобразует свой операнд в число. А унарный оператор
<b>!</b>
преобразует операнд в логическое значение и инвертирует его. Все это стало причиной появления следующих своеобразных способов преобразования типов, которые можно встретить на практике:
<b>x + "" // То же, что и String(х)</b>
<b>+x // То же, что и Number(x). Можно также встретить x-0</b>
<b>!!x //То же, что и Boolean(x). Обратите внимание на два знака !</b>
Форматирование и парсинг чисел являются наиболее типичными задачами, решаемыми компьютерными программами, и потому в JavaScript имеются специализированные функции и методы, обеспечивающие более полный контроль над преобразованиями чисел в строки и строк в числа.
Метод
<b>toString()</b>
класса
<b>Number</b>
принимает необязательный аргумент, определяющий основание системы счисления для преобразования. Если этот аргумент не определен, преобразование выполняется в десятичной системе счисления. Но вы можете производить преобразование в любой системе счисления (с основанием от 2 до 36). Например:
<b>var n = 17;</b>
<b>binary_string = n.toString(2); // Вернет "10001"</b>
<b>octal_string = "0" + n.toString(8); // Вернет "021" </b>
<b>hex_string = "Ox" + n.toString(16); // Вернет "0x11"</b>
При выполнении финансовых или научных расчетов может потребоваться обеспечить преобразование чисел в строки с точностью до определенного числа десятичных знаков или до определенного количества значащих разрядов или получать представление чисел в экспоненциальной форме. Для подобных преобразований чисел в строки класс
<b>Number</b>
определяет три метода. Метод
<b>toFixed()</b>
преобразует число в строку, позволяя указывать количество десятичных цифр после запятой. Он никогда не возвращает строки с экспоненциальным представлением чисел. Метод
<b>toExponential()</b>
преобразует число в строку в экспоненциальном представлении, когда перед запятой находится единственный знак, а после запятой следует указанное количество цифр (т. е. количество значащих цифр в строке получается на одну больше, чем было указано при вызове метода). Метод
<b>toPrecision()</b>
преобразует число в строку, учитывая количество заданных значащих разрядов. Если заданное количество значащих разрядов оказывается недостаточным для отображения всей целой части числа, преобразование выполняется в экспоненциальной форме. Обратите внимание, что все три метода округляют последние цифры или добавляют нули, если это необходимо. Взгляните на следующие примеры:
<b>var п = 123456.789;</b>
<b>n.toFixed(0); // ”123457"</b>
<b>n.toFixed(2); // "123456.79"</b>
<b>n.toFixed(5); // "123456.78900" </b>
<b>n.toExponential(1); // "1.2e+5"</b>
<b>n.toExponential(3); // "1.235Є+5"</b>
<b>n.toPrecision(4); // "1.235e+5"</b>
<b> n.toPrecision(7); // "123456.8"</b>
<b>n.toPrecision(IO);// "123456.7890"</b>
Если передать строку функции преобразования
<b>Number()</b>
, она попытается разобрать эту строку как литерал целого или вещественного числа. Эта функция работает только с десятичными целыми числами и не допускает наличие в строке завершающих символов, не являющихся частью литерала числа. Функции
<b>parseInt()</b>
и
<b>parseFloat()</b>
(это глобальные функции, а не методы какого-либо класса) являются более гибкими. Функция
<b>parseInt()</b>
анализирует только целые числа, тогда как функция
<b>parseFloat()</b>
позволяет анализировать строки, представляющие и целые, и вещественные числа. Если строка начинается с последовательности «Ох» или «ОХ», функция
<b>parseInt()</b>
интерпретирует ее как представление шестнадцатеричного числа.
[2] Обе функции,
<b>parseInt() и parseFloat()</b>
, пропускают начальные пробельные символы, пытаются разобрать максимально возможное количество символов числа и игнорируют все, что следует за ними. Если первый непробельный символ строки не является частью допустимого числового литерала, эти функции возвращают значение
<b>NaN</b>
:
<b>parseInt("3 blind mice") // => 3</b>
<b>parseFloat("3.14 meters") // => 3.14</b>
<b>parseInt("-12.34") // => -12</b>
<b>parseInt("0xff") // => 255</b>
<b>parseInt("0xFF") // => 255</b>
<b>parseInt("-0xFF") // => -255</b>
<b>parseFloat(".1") // => 0.1</b>
<b>parseInt("0.1") // => 0</b>
<b>parseInt(".1") // => NaN: целые числа не могут начинаться с "."</b>
<b>parseFloat("$72.47"); // => NaN: числа не могут начинаться с "$"</b>
Функция
<b>parseInt()</b>
принимает второй необязательный аргумент, определяющий основание системы счисления для разбираемого числа. Допустимыми являются значения от 2 до 36. Например: