2010-06-21 16 views
6

Another question pregunta sobre el significado del fragmento de código a >>> 0 en Javascript. Resulta que es una forma inteligente de garantizar que una variable sea un entero de 32 bits sin signo.¿Cuál es la forma idiomática de realizar una conversión/tipo de letra "entero" en javascript?

Esto es bastante limpio, pero no me gusta por dos razones.

  • La intención de la expresión no está clara, al menos no para mí.
  • No funciona para los números negativos

Esto me lleva a preguntar: ¿Cuál es la forma más idiomática de convertir un valor arbitrario a un "número entero" en Javascript? Debería funcionar para enteros con signo, no solo números no negativos. Los casos en los que esto se rompe debido al hecho de que los enteros son solo flotantes disfrazados en Javascript son aceptables, pero deben ser reconocidos. No debe devolver undefined o NaN en ningún caso (estos no son enteros), pero devuelve 0 para valores no numéricos.

Respuesta

4

parseInt es la forma "más idiomática", ya que describe exactamente lo que quiere que haga. El inconveniente de parseInt es que devuelve NaN si ingresa una cadena no numérica.

Otro método es ORing bit a bit 0 (| 0), que también funciona para números negativos. Además, devuelve 0 cuando se usa en una cadena no numérica. Otra ventaja es que es un poco más rápido que parseInt al usarlo en números reales; es más lento al alimentarlo con cuerdas.

  • 12.4 | 0 salidas 12
  • -12.4 | 0 salidas -12
  • "12.4" | 0 salidas 12
  • "not a number" | 0 salidas 0
+0

No hace exactamente lo que quiero. 'parseInt (" not an int, damnit ")' devuelve 'NaN'. – fmark

+0

@fmark: respuesta ajustada. –

+0

El '| 0' que mencionó funciona bastante bien: las cadenas son 0,' verdadero' es 1, '28.3' es 28,' -28.3' es -28, NaN (como en, por ejemplo '(+" foo) ") | 0') es 0,' undefined' es 0. ¿Me perdí algo? – Amadan

Cuestiones relacionadas