Что лучше, количество(х) или 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;