javascript - soljson - smart contracts ethereum
¿Cuál es la forma idiomática de realizar una conversión/conversión de tipo "entero" en JavaScript? (1)
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 NaN
una cadena no numérica.
Otro método es ORing bit a bit por 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 el parseInt
al usarlo en números reales; es más lento al alimentarlo con cuerdas.
-
12.4 | 0
12.4 | 0
salidas12
-
-12.4 | 0
-12.4 | 0
salidas-12
-
"12.4" | 0
"12.4" | 0
salidas12
-
"not a number" | 0
"not a number" | 0
salidas0
Otra 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.
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 números negativos
Esto me lleva a preguntar: ¿Cuál es la forma más idiomática de convertir un valor arbitrario a un "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 debería volver undefined
o NaN
en ningún caso (estos no son enteros), pero devuelve 0
para valores no numéricos.