Qualquer número, é número. String parece um número, é número. Tudo o resto, vai NaN.
'a' => NaN
'1' => 1
1 => 1
javascript
beatak
fonte
fonte
'1a'
string? Com' 1'
um? Em outras palavras, por que os métodos mais comuns para fazer isso (Number(x)
eparseInt(x, 10)
) não são suficientes para você?Respostas:
Existem quatro maneiras de fazê-lo, tanto quanto eu sei.
Por esse teste rápido que fiz, na verdade depende dos navegadores.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicit
marcou o mais rápido em três navegadores, mas dificulta a leitura do código ... Então, escolha o que você quiser!fonte
1*
para a conversão de data em número, semelhante à+
anterior. ou seja, em1*new Date()
vez de+new Date()
. Possivelmente é mais legível?1*
é preferido porque é menos propenso a erros. Uma variável dangling indesejada antes+1
não é um erro de análise. É um truque semelhante ao usoif (MYCONSTANT == myvar)
noC
.Existem pelo menos 5 maneiras de fazer isso:
Se você deseja converter apenas em números inteiros, outra maneira rápida (e curta) é a não-bit a bit duplo (ou seja, usando dois caracteres til):
por exemplo
~~x;
Referência: http://james.padolsey.com/cool-stuff/double-bitwise-not/
As 5 maneiras comuns que conheço até agora para converter uma string em um número têm suas diferenças (existem mais operadores bit a bit que funcionam, mas todos dão o mesmo resultado
~~
). Este JSFiddle mostra os diferentes resultados que você pode esperar no console de depuração: http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/Console de depuração:
A
~~x
versão resulta em um número em "mais" casos, onde outros geralmente resultamundefined
, mas falha na entrada inválida (por exemplo, retornará0
se a sequência contiver caracteres não numéricos após um número válido).Transbordar
Observe: Excesso de número inteiro e / ou truncamento de bits podem ocorrer com
~~
, mas não as outras conversões. Embora seja incomum digitar valores tão grandes, você precisa estar ciente disso. Exemplo atualizado para incluir valores muito maiores.Alguns testes Perf indicam que o padrão
parseInt
e asparseFloat
funções são, na verdade, as opções mais rápidas, presumivelmente altamente otimizadas pelos navegadores, mas tudo depende da sua exigência, pois todas as opções são rápidas o suficiente : http://jsperf.com/best-of-string-to -número-conversão / 37Tudo isso depende de como os testes perf são configurados, pois alguns mostram que parseInt / parseFloat é muito mais lento.
Minha teoria é:
fonte
~~4294967296
retorna0
.Prefixe a sequência com o
+
operador.fonte
Uma maneira rápida de converter seqüências de caracteres em um número inteiro é usar um bit a bit ou, assim:
Embora dependa de como é implementado, em teoria deve ser relativamente rápido (pelo menos tão rápido quanto
+x
), pois ele primeiro converteráx
em um número e depois executará um ou muito eficiente.fonte
Aqui está uma maneira simples de fazer isso: var num = Number (str); neste exemplo str é a variável que contém a string. Você pode testar e ver como ele funciona em aberto: ferramentas de desenvolvedor do Google chrome , acesse o console e cole o seguinte código. leia os comentários para entender melhor como a conversão é feita.
fonte
Acho que
num * 1
é simples, claro e funciona para números inteiros e flutuantes ...fonte
Provavelmente não é tão rápido, mas tem o benefício adicional de garantir que seu número seja pelo menos um determinado valor (por exemplo, 0) ou, no máximo, um determinado valor:
Se você precisa garantir um valor mínimo, normalmente faria
Math.max(..., 0)
evita que você escreva duas instruções.fonte
Math.abs(input)
? Ele também converte seqüências de caracteres em números positivos e salva alguns caracteres extras.input
não pode ser convertido em número que você vai terNaN
Você pode tentar usar o UnitOf , uma biblioteca de conversão de medidas e tipos de dados que acabamos de lançar oficialmente! O UnitOf é super rápido, pequeno e eficiente na conversão de qualquer tipo de dados sem nunca gerar um erro ou nulo / indefinido. Os valores padrão que você define ou os padrões do UnitOf são retornados quando uma conversão é malsucedida.
fonte
A maneira mais rápida é usar -0:
fonte