Ответ 1
Разница между parseFloat и Number
parseFloat
/parseInt
предназначен для синтаксического анализа строки, а Number
/+
- для принудительного ввода значения в число. Они ведут себя по-другому. Но сначала посмотрим, где они ведут себя одинаково:
parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000
Итак, если у вас стандартный цифровой ввод, нет никакой разницы. Однако, если ваш ввод начинается с числа, а затем содержит другие символы, parseFloat
обрезает номер из строки, а Number
дает NaN
(а не число):
parseFloat('1x'); // => 1
Number('1x'); // => NaN
Кроме того, Number
понимает шестнадцатеричный ввод, а parseFloat
не выполняет:
parseFloat('0x10'); // => 0
Number('0x10'); // => 16
Но Number
действует странно с пустыми строками или строками, содержащими только пробел:
parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0
В целом, я считаю Number
более разумным, поэтому я почти всегда использую Number
лично (и вы обнаружите, что многие внутренние функции JavaScript также используют Number
). Если кто-то набирает '1x'
, я предпочитаю показывать ошибку, а не рассматривать ее так, как если бы они набрали '1'
. Единственный раз, когда я делаю исключение, это когда я преобразовываю стиль в число, и в этом случае parseFloat
полезно, потому что стили имеют форму типа '3px'
, и в этом случае я хочу отказаться от части 'px'
и просто получите 3
, поэтому я нахожу parseFloat
полезным здесь. Но действительно, какой вы выбираете, зависит от вас и какие формы ввода вы хотите принять.
Обратите внимание, что использование унарного оператора +
в точности совпадает с использованием Number
как функции:
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40
Поэтому я обычно просто использую +
для краткости. Пока вы знаете, что он делает, мне легко читать.