Ответ 1
JavaScript предоставляет два метода преобразования не числовых примитивов в числа: parseInt() и parseFloat(). Как вы, возможно, догадались, первый преобразует значение в целое число, тогда как последнее преобразует значение в число с плавающей запятой.
Любой литерал числа, содержащийся в строке, также преобразуется правильно, поэтому строка "0xA" правильно преобразуется в число 10. Однако строка "22.5" будет преобразована в 22, поскольку десятичная точка является недопустимым символом для целого числа. Некоторые примеры:
var iNum1 = parseInt ( "1234blue" );//возвращает 1234
var iNum2 = parseInt ( "0xA" );//возвращает 10
var iNum3 = parseInt ( "22.5" );//возвращает 22
var iNum4 = parseInt ( "синий" );//возвращает NaN
Метод parseInt() также имеет режим radix, позволяющий преобразовывать строки в двоичную, восьмеричную, шестнадцатеричную или любую другую базу в целое. Радикс указан как второй аргумент parseInt(), поэтому вызов для разбора шестнадцатеричного значения выглядит следующим образом:
var iNum1 = parseInt ( "AF", 16);//возвращает 175
Конечно, это также можно сделать для двоичной, восьмеричной и четной десятичной (который является режимом по умолчанию):
var iNum1 = parseInt ( "10" , 2);//возвращает 2
var iNum2 = parseInt ( "10" , 8);//возвращает 8
var iNum2 = parseInt ( "10" , 10);//возвращает 10
Если десятичные числа содержат начальный ноль, всегда лучше указать radix как 10, чтобы вы случайно не получили восьмеричное значение. Например:
var iNum1 = parseInt ( "010" );//возвращает 8
var iNum2 = parseInt ( "010", 8);//возвращает 8
var iNum3 = parseInt ( "010", 10);//возвращает 10
В этом коде обе строки анализируют строку "010" на число. Первая строка думает, что строка является восьмеричным значением и анализирует ее так же, как и вторая строка (которая определяет радикс как 8). последняя строка определяет радиус 10, поэтому iNum3 заканчивается на 10.
Другое отличие при использовании parseFloat() состоит в том, что строка должна представлять число с плавающей запятой в десятичной форме, а не восьмеричную или шестнадцатеричную. Этот метод игнорирует начальные нули, поэтому восьмеричное число 0908 будет проанализировано на 908, а шестнадцатеричное число 0xA вернет NaN, потому что x не является допустимым символом для числа с плавающей запятой. Также нет режима radix для parseFloat().
Некоторые примеры использования parseFloat():
var fNum1 = parseFloat ( "1234blue" );//возвращает 1234
var fNum2 = parseFloat ( "0xA" );//возвращает 0
var fNum3 = parseFloat ( "22.5" );//возвращает 22.5
var fNum4 = parseFloat ( "22.34.5" );//возвращает 22.34
var fNum5 = parseFloat ( "0908" );//возвращает 908
var fNum6 = parseFloat ( "синий" );//возвращает NaN