Tengo un problema molesto en JavaScript .
> parseInt(1 / 0, 19)
> 18
¿Por qué vuelve la parseIntfunción 18?
javascript
parseint
cebor
fuente
fuente

ifpodría ayudar.Respuestas:
El resultado de
1/0esInfinity.parseInttrata su primer argumento como una cadena, lo que significa que primeroInfinity.toString()se llama, produciendo la cadena"Infinity". Por lo tanto, funciona igual que si le pidiera que se convirtiera"Infinity"en base 19 a decimal.Aquí están los dígitos en base 19 junto con sus valores decimales:
Lo que sucede después es que
parseIntescanea la entrada"Infinity"para encontrar qué parte de ella se puede analizar y se detiene después de aceptar la primeraI(porquenno es un dígito válido en la base 19).Por lo tanto, se comporta como si hubiera llamado
parseInt("I", 19), que se convierte al 18 decimal según la tabla anterior.fuente
parseInt('Infini',24).ntambién es un dígito válido, por lo que en realidad termina haciendoparseInt("Infini", 24).Aquí está la secuencia de eventos:
1/0evalúa aInfinityparseIntleeInfinityy felizmente señala queIes 18 en base 19parseIntignora el resto de la cadena, ya que no se puede convertir.Tenga en cuenta que obtendría un resultado para cualquier base
>= 19, pero no para las bases por debajo de eso. Para las bases>= 24, obtendrás un resultado mayor, ya que senconvierte en un dígito válido en ese punto.fuente
parseIntse aceptará es 36, ya que hay 26 letras en el alfabeto inglés, y la convención es usar dígitos y luego letras como el conjunto de dígitos válidos en la base dada.Infinitya"Infinity"...Para agregar a las respuestas anteriores:
parseInt está destinado a analizar cadenas en números (la pista está en el nombre). En su situación, no desea realizar ningún análisis ya que 1/0 ya es un número, por lo que es una elección extraña de función. Si tiene un número (lo que tiene) y desea convertirlo a una base en particular, debe usar toString con una raíz .
fuente
Para agregar a las respuestas anteriores
parseInt(1/0,19)es equivalente aparseInt("Infinity",19)Dentro de la base 19 números
0-9yA-I(or a-i)son números válidos. Entonces, desde el "Infinito" tomaIde la base 19 y se convierte en la base 10 que se convierte en 18 Luego, trata de tomar el siguiente carácter, es decir,nque no está presente en la base 19, por lo que descarta los siguientes caracteres (según el comportamiento de JavaScript de convertir una cadena a un número )Entonces, si escribe
parseInt("Infinity",19)ORparseInt("I",19)OparseInt("i",19)el resultado será el mismo, es decir18.Ahora, si escribes
parseInt("I0",19)el resultado será342comoI X 19 (the base)^1 + 0 X 19^0=18 X 19^1 + 0 X 19^0=18 X 19 + 0 X 1=342Del mismo modo,
parseInt("I11",19)dará lugar a6518es decir
fuente