Типовые преобразования ECMAScript

Одна из важнейших характеристик всех языков программирования - это способность выполнять типовое преобразование.

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

Большинство типов имеют методы для простого преобразования, а также несколько глобальных методов, которые можно использовать для более сложных преобразований. В любом случае, в ECMAScript типовое преобразование является коротким шагом.

Преобразование в строку

Интересно, что базовые значения Boolean, числа и строк в ECMAScript являются мнимыми объектами, что означает, что они фактически имеют свойства и методы.

Например, чтобы получить длину строки, можно использовать следующий код:

var sColor = "red";
alert(sColor.length); // Вывод "3"

Несмотря на то, что "red" является базовым типом строки, у него все же есть свойство length, которое хранит размер строки.

В общем, три основных базовых типа Boolean, числа и строки имеют метод toString(), который позволяет преобразовать их значения в строки.

Совет:Вы, возможно, спросите: «Есть ли у строки метод toString(), это не излишне ли?» Да, это действительно так, но ECMAScript определяет, что все объекты имеют метод toString(), независимо от того, являются ли они мнимыми объектами или реальными объектами. Поскольку тип String является мнимым объектом, он определенно имеет метод toString().

Метод toString() типа Boolean просто выводит "true" или "false", результат зависит от значения переменной:

var bFound = false;
alert(bFound.toString()); // Вывод "false"

Метод toString() типа Number очень особенный, у него есть два режима, то естьРежим по умолчаниюиРежим основанияМетод toString() по умолчанию просто выводит соответствующую строку значения числа (будь то целое, дробное или в виде научной степени), как показано ниже:

var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString()); // Вывод "10"
alert(iNum2.toString()); // Вывод "10"

Комментарий:В режиме по умолчанию, независимо от того, в каком виде был первоначально заявлен номер, метод toString() типа Number возвращает десятичное представление числа. Поэтому числа, заявленные в виде восьмеричной или шестнадцатеричной константы, выводятся в десятичной форме.

Используя шаблон основания метода toString() типа Number, можно использовать различныеОснованиеВыводите числа, например, основание двоичной системы 2, основание восьмеричной системы 8, основание шестнадцатеричной системы 16.

ОснованиеЭто просто другое способ добавления, которое является аргументом метода toString():

var iNum = 10;
alert(iNum.toString(2)); // Вывод "1010"
alert(iNum.toString(8)); // Вывод "12"
alert(iNum.toString(16)); // Вывод "A"

В предыдущем примере число 10 было выведено в трех различных формах: двоичная, восьмиричная и шестнадцатеричная. HTML использует шестнадцатеричное представление для каждого цвета, и эта функция очень полезна при обработке чисел в HTML.

Комментарий:Вызов toString(10) для чисел и вызов toString() одинаковы, они оба возвращают десятичное представление числа.

См. также:

См. также Руководство по JavaScriptПодробная информация о методе toString():

Преобразование в число

ECMAScript предоставляет два метода для преобразования нечисловых primитивных значений в числа, это parseInt() и parseFloat().

Как вы, возможно, ожидаете, первый преобразует значение в целое число, а второй — в浮пункционное число. Эти методы могут работать только с типом String; для других типов они возвращают NaN.

parseInt()

Прежде чем определить, является ли строка числовым значением, parseInt() и parseFloat() тщательно анализируют эту строку.

Метод parseInt() сначала проверяет символ на позиции 0, чтобы определить, является ли онvalidным числовым символом; если нет,该方法 возвращает NaN и не продолжает выполнять другие операции. Но если символ является validным числовым символом, метод проверяет символ на позиции 1, и так далее. Этот процесс продолжается до тех пор, пока не будет обнаружен символ, который не является validным числовым символом, в этом случае parseInt() преобразует строку до этого символа в число.

Например, если нужно преобразовать строку "12345red" в целое число, то метод parseInt() вернет 12345, потому что при проверке символа r процесс проверки будет остановлен.

Числовые literals в строке будут правильно преобразованы в числа, например, "0xA" будет правильно преобразовано в число 10. Однако, строка "22.5" будет преобразована в 22, так как для целых чисел точка является недопустимым символом.

Ниже приведены некоторые примеры:

var iNum1 = parseInt("12345red"); // возвращается 12345
var iNum1 = parseInt("0xA"); // возвращается 10
var iNum1 = parseInt("56.9"); // возвращается 56
var iNum1 = parseInt("red"); // возвращается NaN

Метод parseInt() также имеет базовый режим, который позволяет преобразовать строку из двоичной, восьмеричной, шестнадцатеричной или другой системы счисления в целое число. База указывается вторым параметром метода parseInt(), поэтому для преобразования шестнадцатеричных значений необходимо вызывать метод parseInt() следующим образом:

var iNum1 = parseInt("AF", 16); // возвращается 175

Конечно, для двоичного, восьмеричного и даже десятичного (по умолчанию) числовых систем можно так вызывать метод parseInt():

var iNum1 = parseInt("10", 2); // возвращается 2
var iNum2 = parseInt("10", 8); // возвращается 8
var iNum3 = parseInt("10", 10); // возвращается 10

Если десятичное число содержит ведущие нули, лучше использовать базовый номер 10, чтобы не получить случайное значение octal. Например:

var iNum1 = parseInt("010"); // возвращается 8
var iNum2 = parseInt("010", 8); // возвращается 8
var iNum3 = parseInt("010", 10); // возвращается 10

В этом фрагменте кода две строки кода интерпретируют строку "010" как число. Первая строка interpreтирует эту строку как восьмеричное значение, интерпретируя её так же, как и вторая строка (указан базовый номер 8). Последняя строка указывает базовый номер 10, поэтому iNum3 в конечном итоге равно 10.

См. также

См. также Руководство по JavaScriptПредоставлены более детальные informacje о методе parseInt():parseInt().

parseFloat()

Метод parseFloat() обрабатывает аналогично методу parseInt(), проверяя каждый символ от позиции 0 до первогоневалидного символа, и преобразует строку перед этим символом в целое число.

Однако, для этого метода, первый出现的 точка в десятичной дроби являетсяvalidным символом. Если есть два десятичных знака, второй будет считатьсяневалидным. parseFloat() конвертирует символы перед этой точкой в числа. Это означает, что строка "11.22.33" будет интерпретирована как 11.22.

Одна из других особенностей использования метода parseFloat() заключается в том, что строка должна быть представлена в десятичной форме для числа с плавающей запятой, а не в восьмеричной или шестнадцатеричной. Этот метод пропускает ведущие нули, поэтому восьмеричное число 0102 будет интерпретировано как 102. Для шестнадцатеричного числа 0xA该方法 вернет NaN, так как в числе с плавающей запятой x не являетсяvalidным символом (Комментарий:По результатам тестирования, конкретное реализация браузера возвращает 0, а не NaN).

Кроме того, метод parseFloat() не имеет базового режима

Ниже приведены некоторые примеры использования метода parseFloat()

var fNum1 = parseFloat("12345red"); // возвращается 12345
var fNum2 = parseFloat("0xA"); // возвращается NaN
var fNum3 = parseFloat("11.2"); // возвращается 11.2
var fNum4 = parseFloat("11.22.33"); // возвращается 11.22
var fNum5 = parseFloat("0102");	//возвращает 102
var fNum1 = parseFloat("red");	//возвращает NaN

попробуйте сами

См. также

См. также Руководство по JavaScriptПредоставленные подробности о методе parseFloat():parseFloat().

принудительное преобразование

Вы также можете использоватьПринудительное преобразование (type casting)Для обработки типов преобразуемых значений. Использование принудительного преобразования позволяет получить доступ к определенным значениям, даже если они другого типа.

Комментарий редактора:Слово "cast" означает "铸造", что очень соответствует значению "принудительное преобразование".

В ECMAScript доступны 3 типа强制ного преобразования:

  • Boolean(value) - преобразует заданное значение в тип Boolean;
  • Number(value) - преобразует заданное значение в число (может быть целым или дробным числом);
  • String(value) - преобразует заданное значение в строку;

Использование одного из этих функций для преобразования значения создает новый значений, содержащий преобразованное значение из исходного значения. Это может привести к неожиданным последствиям.

Функция Boolean()

Если значение для преобразования является строкой с至少 одним символом, не равной нулю, или объектом, функция Boolean() возвращает true. Если значение является пустой строкой, числом 0, undefined или null, она возвращает false.

Вы можете использовать следующий код для тестирования конвертации типа Boolean:

var b1 = Boolean("");		//false - пустая строка
var b2 = Boolean("hello");		//true - не пустая строка
var b1 = Boolean(50);		//true - не нулевое число
var b1 = Boolean(null);		//false - null
var b1 = Boolean(0);		//false - ноль
var b1 = Boolean(new object());	//true - объект

Функция Number()

Конвертация типа с помощью функции Number() аналогична методам parseInt() и parseFloat(), но она преобразует весь значения, а не его часть.

Помните, функции parseInt() и parseFloat() преобразуют только строку до первого недопустимого символа, поэтому "1.2.3" будет преобразовано в "1" и "1.2".

Обязательное преобразование типов с помощью Number(), "1.2.3" вернет NaN, так как целое значение строки не может быть преобразовано в число. Если строковое значение может быть полностью преобразовано, Number() определит, следует ли вызывать метод parseInt() или parseFloat().

Ниже приведена таблица, объясняющая, что происходит при вызове метода Number() для различных значений:

Использование Результат
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("1.2") 1.2
Number("12") 12
Number("1.2.3") NaN
Number(new object()) NaN
Number(50) 50

Функция String()

Последний способ обязательного преобразования типов String() самый простой, так как он может преобразовать любое значение в строку.

Чтобы выполнить это обязательное преобразование типов, нужно просто вызвать метод toString() значения, переданного в качестве параметра, например, преобразовать 12 в "12", true в "true", false в "false" и т.д.

Единственное отличие между обязательным преобразованием типов в строку и вызовом метода toString() заключается в том, что обязательное преобразование типов null и undefined может генерировать строку без вызова ошибки:

var s1 = String(null);	// "null"
var oNull = null;
var s2 = oNull.toString();	// вызовет ошибку

Обязательное преобразование типов очень полезно при обработке слабо типизированных языков, таких как ECMAScript, но следует убедиться, что используется правильное значение.