A função parseInt do Javascript não parece funcionar completamente.
parseInt("01") returns 1
parseInt("02") returns 2
parseInt("03") returns 3
parseInt("04") returns 4
parseInt("05") returns 5
parseInt("06") returns 6
parseInt("07") returns 7
parseInt("08") returns 0
parseInt("09") returns 0
Você não pode explicar isso. De uma chance. (jsFiddle)
Editar Desde que esta pergunta foi feita e respondida, o "recurso" de padronizar para raiz octal foi descontinuado. [ 1 ] [ 2 ]
javascript
salvador
fonte
fonte
You can't explain that.
Sim, você pode => developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Respostas:
Isso ocorre porque se um número começa com um '0', ele é tratado como base 8 (octal).
Você pode forçar a base passando a base como o segundo parâmetro.
De acordo com a documentação , o segundo parâmetro é opcional, mas nem sempre é considerado 10, como você pode ver no seu exemplo.
fonte
11
na base 8 está9
na base 10.09
não é um número de base 8 válido.As chamadas para
parseInt
devem sempre especificar uma base no segundo argumento:Versões anteriores de JavaScript tratam strings começando com
0
como octal (quando nenhuma base é especificada) e nem08
nem09
são números octais válidos.Da documentação do Mozilla :
E a partir do padrão ECMAScript 3 :
A versão mais recente do JavaScript ( ECMAScript 5 ) abandona esse comportamento , mas você ainda deve especificar a raiz para satisfazer os navegadores mais antigos.
fonte
Existe um parâmetro Radix
Onde a base é o radical.
Neste caso, você está avaliando números de base 10 (decimais), portanto, use
fonte
Isso não parece ser totalmente válido em novos navegadores. O Internet Explorer 9 e 10 retornará 8 se você executar 'parseInt ("08")', enquanto o Internet Explorer 8 e as versões anteriores retornarão 0 (o IE10 no modo quirks também retornará 0).
A versão mais recente do Chrome também retorna 8, então eles devem ter mudado a interpretação recentemente.
fonte
Este problema está obsoleto agora. Mas você ainda pode usar radix in
parseInt
para converter o número de outras bases na base 10. Por exemplo,retorna
17
(que é base 10 de0010001
).fonte
Dica: como você já sabe quando o padrão para octal foi preterido. Aqui está como você corrigiria em navegadores legados
fonte
O problema parece ter mudado agora na maioria dos navegadores.
Firefox 51.0.1 (64 bits)
Chrome 55.0.2883.95 (64 bits)
Safari 10.0 (12602.1.50.0.10)
=====
Prática Recomendada
Dito isso, apenas para ficar no lado mais seguro e evitar problemas, use o parâmetro base / radix conforme sugerido na resposta aceita .
Teste extra
Eu só queria testar isso também, se o argumento não for uma string. Chrome e Safari dão o resultado exato. O Firefox também retorna um resultado adequado, mas com um aviso.
fonte