Conversão de Tipos 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

Experimente você mesmo

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.