javascript - try - parseint es6




Por que parseInt(1/0, 19) retorna 18? (3)

Eu tenho um problema chato em JavaScript.

> parseInt(1 / 0, 19)
> 18

Por que o parseInt retorna 18 ?


Aqui está a sequência de eventos:

  • 1/0 avalia para Infinity
  • parseIntInfinity e felizmente observa que I 18 anos na base 19
  • parseInt ignora o restante da string, já que ela não pode ser convertida.

Note que você obteria um resultado para qualquer base >= 19 , mas não para bases abaixo disso. Para bases >= 24 , você obterá um resultado maior, pois n se torna um dígito válido naquele ponto.


O resultado de 1/0 é Infinity .

parseInt trata seu primeiro argumento como uma string que significa que primeiro Infinity.toString() é chamado, produzindo a string "Infinity" . Então funciona da mesma forma como se você pedisse para converter "Infinity" na base 19 para decimal.

Aqui estão os dígitos na base 19, juntamente com seus valores decimais:

Base 19   Base 10 (decimal)
---------------------------
   0            0
   1            1
   2            2
   3            3
   4            4
   5            5
   6            6
   7            7
   8            8
   9            9
   a            10
   b            11
   c            12
   d            13
   e            14
   f            15
   g            16
   h            17
   i            18

O que acontece a seguir é que parseInt varre a entrada "Infinity" para descobrir qual parte dela pode ser analisada e pára depois de aceitar a primeira I (porque n não é um dígito válido na base 19).

Portanto, ele se comporta como se você chamasse parseInt("I", 19) , que se converte em decimal 18 pela tabela acima.


Para adicionar as respostas acima:

parseInt destina-se a analisar cadeias de caracteres em números (a pista está no nome). Na sua situação, você não quer fazer nenhuma análise, pois 1/0 é um número, então é uma estranha escolha de função. Se você tem um número (o que você faz) e deseja convertê-lo para uma base específica, você deve usar toString com um radical em vez disso.

var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"






parseint