Что лучше, количество(х) или parseFloat(х)?


Что лучше?

Я спрашиваю это только ради бритья нескольких байтов, так как я могу использовать +x вместо числа(x). Делает ли parsefloat что-то лучше?

5 99

5 ответов:

разницу между parseFloat и количество

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

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

разница в том, что происходит, когда вход не является "правильным числом". Number возвращает NaN пока parseFloat анализирует "столько, сколько может". Если вызывается на пустой строке Number возвращает 0 в то время как parseFloat возвращает NaN.

например:

Number("") === 0               // also holds for false
isNaN(parseFloat("")) === true // and null

isNaN(Number("32f")) === true
parseFloat("32f") === 32

в этих примерах вы можете увидеть разницу:

Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;

parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;

parseFloat немного медленнее, потому что он ищет первое появление числа в строке, в то время как number constuctor создает новый экземпляр number из строк, содержащих числовые значения с пробелами или содержащие ложные значения.

P. S. Если вас интересуют какие-то универсальные преобразования типа решениям вы можете прочитать пост про преобразование типов в моем блоге: http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html

для пустой строки они разные.

+"" и Number("") возвращает 0, в то время как parseFloat("") возвращает NaN.

насколько я знаю, и это только Подслушано от коллег, поэтому может быть совершенно плохо информировано, что parseFloat немного быстрее.

хотя при дальнейшем исследовании, казалось бы, что эта разница в производительности зависит от браузера.

http://jsperf.com/parseint-vs-parsefloat/6

взгляните на эти результаты jsPerf, и сделать вы звоните. (он также включает в себя Тесты +x)

как отмечено в ответе @xdazz, +"" и Number("") return 0 пока parseFloat("") возвращает NaN так что снова я бы пошел с parseFloat, потому что пустая строка не означает число 0, только строку с символом "0" в нем означает 0;