Conversão de Tipos ECMAScript
- Página anterior Tipos Primitivos ECMAScript
- Próxima página Tipos de Referência ECMAScript
Um dos principais recursos de todos os linguagens de programação é a capacidade de fazer conversões de tipo.
O ECMAScript oferece aos desenvolvedores uma grande quantidade de métodos de conversão de tipo simples.
A maioria dos tipos tem métodos para conversões simples, e há alguns métodos globais que podem ser usados para conversões mais complexas. Em qualquer caso, nas conversões de tipo do ECMAScript, é uma operação curta e simples.
Conversão para string
O que é interessante sobre os valores primitivos Boolean, números e strings do ECMAScript é que eles são objetos pseudo, o que significa que eles realmente têm propriedades e métodos.
Por exemplo, para obter o comprimento de uma string, você pode usar o seguinte código:
var sColor = "red"; alert(sColor.length); // Saída "3"
Embora "red" seja uma string do tipo primitivo, ela ainda tem a propriedade length, usada para armazenar o tamanho da string.
Em resumo, os três tipos principais de tipos primitivos Boolean, números e strings têm o método toString(), que pode converter seus valores em strings.
Dica:Talvez você pergunte, 'As strings têm também o método toString(), não é redundante?' Sim, é exatamente isso, o ECMAScript define que todos os objetos têm o método toString(), seja um objeto pseudo ou verdadeiro. Porque o tipo String é um objeto pseudo, ele certamente tem o método toString().
O método toString() do tipo Boolean apenas imprime "true" ou "false", dependendo do valor da variável:
var bFound = false; alert(bFound.toString()); // Saída "false"
O método toString() do tipo Number é especial, pois possui dois modos, ou seja:Modo padrãoeModo de baseNo modo padrão, o método toString() apenas imprime o valor numérico correspondente na string (seja inteiro, número de ponto flutuante ou notação científica), conforme mostrado a seguir:
var iNum1 = 10; var iNum2 = 10.0; alert(iNum1.toString()); // Saída "10" alert(iNum2.toString()); // Saída "10"
Comentário:No modo padrão, independentemente da forma de representação inicial do número, o método toString() do tipo Number retorna sempre a representação decimal do número. Portanto, números declarados em litterais octais ou hexadecimais são impressos na forma decimal.
O padrão de base do método toString() do tipo Number pode ser usado de diferentes maneiras:BaseImprima números, por exemplo, a base binária é 2, a base octal é 8, e a base hexadecimal é 16.
BaseÉ apenas outra forma de adição para a base que é o parâmetro do método toString():
var iNum = 10; alert(iNum.toString(2)); // Saída "1010" alert(iNum.toString(8)); // Saída "12" alert(iNum.toString(16)); // Saída "A"
No exemplo anterior, o número 10 foi impresso em 3 formatos diferentes: binário, octal e hexadecimal. O HTML usa hexadecimal para representar cores, então essa funcionalidade é muito útil ao lidar com números no HTML.
Comentário:Chamar toString(10) para números é o mesmo que chamar toString(), ambos retornam a forma decimal do número.
Consulte:
Veja Manual de Referência do JavaScriptDetalhes sobre o método toString():
Converter para número
ECMAScript oferece dois métodos para converter valores originais não numéricos em números,那就是 parseInt() 和 parseFloat()。
Como você pode imaginar, o primeiro converte o valor para inteiro, e o segundo para número flutuante. Essas funções só funcionam corretamente quando chamadas para tipos String; para outros tipos, retornam NaN.
parseInt()
Antes de determinar se uma string é um valor numérico, parseInt() e parseFloat() analisam cuidadosamente a string.
A função parseInt() primeiro verifica o caractere na posição 0, para determinar se ele é um número válido; se não for, a função retornará NaN e não continuará a execução de outras operações. Mas se o caractere for um número válido, a função verifica o caractere na posição 1, realizando o mesmo teste. Este processo continuará até que um caractere não válido seja encontrado, e então a função convertirá a string antes deste caractere para um número.
Por exemplo, se você quiser converter a string "12345red" para um inteiro, a função parseInt() retornará 12345, porque quando ela verifica o caractere r, ela para de verificar o processo.
Os números literais contidos na string serão convertidos corretamente para números, por exemplo, "0xA" será corretamente convertido para o número 10. No entanto, a string "22.5" será convertida para 22, porque o ponto decimal é um caractere inválido para números inteiros.
Alguns exemplos a seguir:
var iNum1 = parseInt("12345red"); //retorna 12345 var iNum1 = parseInt("0xA"); //retorna 10 var iNum1 = parseInt("56.9"); //retorna 56 var iNum1 = parseInt("red"); //retorna NaN
A função parseInt() também tem um modo de base, que pode converter strings de binário, octal, hexadecimal ou qualquer outra base para inteiro. A base é especificada pelo segundo parâmetro da função parseInt(), então para analisar valores hexadecimais, é necessário chamar a função parseInt() da seguinte forma:
var iNum1 = parseInt("AF", 16); //retorna 175
Claro, para binário, octal e até decimal (modo padrão), pode chamar a função parseInt() assim:
var iNum1 = parseInt("10", 2); //retorna 2 var iNum2 = parseInt("10", 8); //retorna 8 var iNum3 = parseInt("10", 10); //retorna 10
Se o número decimal contiver zeros iniciais, é melhor usar a base 10 para evitar obter valores octais inesperados. Por exemplo:
var iNum1 = parseInt("010"); //retorna 8 var iNum2 = parseInt("010", 8); //retorna 8 var iNum3 = parseInt("010", 10); //retorna 10
Neste código, duas linhas de código interpretam o caractere "010" como um número. A primeira linha considera a string como um valor octal, interpretando-a da mesma forma que a segunda linha (declarando a base como 8). A última linha declara a base como 10, então iNum3 termina igual a 10.
Veja
Veja Manual de Referência do JavaScriptDetalhes detalhados sobre o método parseInt():parseInt().
parseFloat()
O método parseFloat() é semelhante ao método parseInt(), onde ele olha para cada caractere a partir da posição 0 até encontrar o primeiro caractere inválido, convertendo a string antes desse caractere em um número.
No entanto, para este método, o primeiro ponto decimal é um caractere válido. Se houver dois pontos decimais, o segundo ponto decimal será considerado inválido. parseFloat() convertirá os caracteres antes do ponto decimal em números. Isso significa que a string "11.22.33" será interpretada como 11.22.
Outra diferença na utilização do método parseFloat() é que a string deve ser representada em formato decimal para números de ponto flutuante, não em octal ou hexadecimal. Este método ignora zeros iniciais, então o número octal 0102 será interpretado como 102. Para o número hexadecimal 0xA, o método retornará NaN, pois x não é um caractere válido em números de ponto flutuante).Comentário:De acordo com os testes, a implementação específica do navegador retorna 0, em vez de NaN).
Além disso, o método parseFloat() não possui um padrão base.
A seguir estão alguns exemplos do uso do método parseFloat():
var fNum1 = parseFloat("12345red"); //retorna 12345 var fNum2 = parseFloat("0xA"); //retorna NaN var fNum3 = parseFloat("11.2"); //retorna 11.2 var fNum4 = parseFloat("11.22.33"); //retorna 11.22 var fNum5 = parseFloat("0102"); // retorna 102 var fNum1 = parseFloat("red"); // retorna NaN
Veja
Veja Manual de Referência do JavaScriptDetalhes sobre o método parseFloat():parseFloat().
conversão de tipo forçada
Você também pode usarConversão de tipo forçada (type casting)para lidar com o tipo de valor a ser convertido. A conversão de tipo forçada pode acessar valores específicos, mesmo que sejam de outro tipo.
Nota do autor:O termo "cast" tem o significado de "fabricar", o que se encaixa perfeitamente no conceito de "conversão forçada".
Existem 3 conversões de tipo disponíveis no ECMAScript:
- Boolean(value) - converte o valor fornecido em Booleano;
- Number(value) - converte o valor fornecido em um número (pode ser inteiro ou ponto flutuante);
- String(value) - converte o valor fornecido em uma string;
Usar um desses três métodos para converter valores cria um novo valor, que armazena o valor diretamente convertido do valor original. Isso pode causar consequências inesperadas.
Função Boolean()
Quando o valor a ser convertido é uma string com pelo menos um caractere, um número não zero ou um objeto, a função Boolean() retornará true. Se o valor for uma string vazia, o número zero, undefined ou null, ela retornará false.
Você pode usar o seguinte código para testar a conversão de tipo forçada Booleana:
var b1 = Boolean(""); //false - string vazia var b2 = Boolean("hello"); //true - string não vazia var b1 = Boolean(50); //true - número não zero var b1 = Boolean(null); //false - null var b1 = Boolean(0); //false - zero var b1 = Boolean(new object()); //true - objeto
Função Number()
A conversão de tipo forçada da função Number() é semelhante aos métodos parseInt() e parseFloat(), mas ela converte todo o valor, não apenas parte dele.
Lembre-se, os métodos parseInt() e parseFloat() só convertem a string antes do primeiro caractere inválido, portanto "1.2.3" será convertida em "1" e "1.2", respectivamente.
Ao usar Number() para conversão de tipo forçada, "1.2.3" retornará NaN, porque o valor da string inteira não pode ser convertido em número. Se o valor da string puder ser convertido completamente, o Number() determinará se deve chamar o método parseInt() ou parseFloat().
A tabela a seguir explica o que acontece ao chamar o método Number() para diferentes valores:
Uso | Resultados |
---|---|
Number(false) | 0 |
Number(true) | 1 |
Number(undefined) | NaN |
Number(null) | 0 |
Number("1.2") | 1.2 |
Number("12") | 12 |
Number("1.2.3") | NaN |
Number(new object()) | NaN |
Number(50) | 50 |
Função String()
O último método de conversão de tipo forçada String() é o mais simples, pois ele pode converter qualquer valor para uma string.
Para executar essa conversão de tipo forçada, é necessário chamar o método toString() do valor passado como parâmetro, ou seja, converter 12 para "12", true para "true", false para "false", e assim por diante.
A única diferença entre a conversão de tipo forçada para string e a chamada do método toString() é que a conversão de tipo forçada de valores null e undefined pode gerar uma string sem gerar erro:
var s1 = String(null); // "null" var oNull = null; var s2 = oNull.toString(); // Gera erro
Quando se lida com linguagens de tipo fraco como ECMAScript, a conversão de tipo forçada é muito útil, mas deve-se garantir que o valor esteja correto.
- Página anterior Tipos Primitivos ECMAScript
- Próxima página Tipos de Referência ECMAScript