round parselong parsedecimal number decimals decimales javascript optimization

parselong - round javascript



¿Qué es mejor, número(x) o parseFloat(x)? (5)

¿Cual es mejor?

Estoy pidiendo esto solo por el hecho de afeitar algunos bytes, ya que puedo usar + x en lugar de número (x). ¿Parsefloat hace algo mejor?


La diferencia entre parseFloat y Number

parseFloat / parseInt es para analizar una cadena, mientras que Number / + es para forzar un valor a un número. Se comportan de manera diferente. Pero primero miremos dónde se comportan de la misma manera:

parseFloat(''3''); // => 3 Number(''3''); // => 3 parseFloat(''1.501''); // => 1.501 Number(''1.501''); // => 1.501 parseFloat(''1e10''); // => 10000000000 Number(''1e10''); // => 10000000000

Por lo tanto, siempre que tenga una entrada numérica estándar, no hay diferencia. Sin embargo, si su entrada comienza con un número y luego contiene otros caracteres, parseFloat trunca el número de la cadena, mientras que Number da NaN (no un número):

parseFloat(''1x''); // => 1 Number(''1x''); // => NaN

Además, Number entiende la entrada hexadecimal mientras que parseFloat no:

parseFloat(''0x10''); // => 0 Number(''0x10''); // => 16

Pero Number actúa de forma extraña con cadenas vacías o cadenas que contienen solo espacios en blanco:

parseFloat(''''); // => NaN Number(''''); // => 0 parseFloat('' /r/n/t''); // => NaN Number('' /r/n/t''); // => 0

En general, considero que el Number es más razonable, así que casi siempre uso el Number personalmente (y encontrará que muchas de las funciones internas de JavaScript también usan el Number ). Si alguien escribe ''1x'' , prefiero mostrar un error en lugar de tratarlo como si hubiera escrito ''1'' . La única vez que realmente hago una excepción es cuando estoy convirtiendo un estilo en un número, en cuyo caso parseFloat es útil porque los estilos vienen en una forma como ''3px'' , en cuyo caso quiero soltar la parte ''px'' y solo obtener el 3 , así que me resulta útil parseFloat aquí. Pero realmente cuál elegir, depende de usted y qué formas de entrada desea aceptar.

Tenga en cuenta que usar el operador unario + es exactamente lo mismo que usar el Number como una función:

Number(''0x10''); // => 16 +''0x10''; // => 16 Number(''10x''); // => NaN +''10x''; // => NaN Number(''40''); // => 40 +''40''; // => 40

Entonces usualmente solo uso + para abreviar. Mientras sepa lo que hace, me resulta fácil de leer.


En estos ejemplos, puedes ver la diferencia:

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

ParseFloat es un poco más lento porque busca la primera aparición de un número en una cadena, mientras que Number constuctor crea una nueva instancia de número de cadenas que contiene valores numéricos con espacios en blanco o que contiene valores falsos.

PD: Si está interesado en algunas soluciones de conversión de tipo universal, puede leer la publicación sobre conversión de tipo en mi blog: http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html


La diferencia es qué sucede cuando la entrada no es un "número apropiado". Number devuelve NaN mientras que parseFloat analiza "tanto como puede". Si se llama a la cadena vacía Number devuelve 0 mientras que parseFloat devuelve NaN .

Por ejemplo:

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


Para cadena vacía, son diferentes.

+"" y Number("") devuelve 0, mientras que parseFloat("") devuelve NaN.


Por lo que yo sé, y esto solo es escuchado por colegas, por lo que podría estar completamente informado, ParseFloat es marginalmente más rápido.

Aunque en investigaciones posteriores, parecería que esta diferencia de rendimiento depende del navegador.

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

Eche un vistazo a estos resultados de jsPerf y haga su llamada. (Incluye + x pruebas también)

Como se señala en la respuesta de @xdazz, +"" y Number("") devuelven 0 mientras que parseFloat("") devuelve NaN así que de nuevo iría con parseFloat, porque una cadena vacía NO significa el número 0, solo una cadena con el caracter "0" en el medio 0;