Что лучше, количество(х) или parseFloat(х)?
Что лучше?
Я спрашиваю это только ради бритья нескольких байтов, так как я могу использовать +x вместо числа(x). Делает ли parsefloat что-то лучше?
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("")return0покаparseFloat("")возвращаетNaNтак что снова я бы пошел с parseFloat, потому что пустая строка не означает число 0, только строку с символом"0"в нем означает 0;