Em JavaScript, os valores podem ser de tipos diferentes. Alterar o tipo de uma variável pode ser feito com uma conversão de tipos explícita. Além disso, o JavaScript também realiza coerção de tipos (conversão de tipos implícita) quando o contexto o exige.
O JavaScript não tem um construto para converter para um tipo (diferente), como muitas outras linguagens, mas podes usar alguns auxiliares incorporados em vez disso.
Em particular, Boolean, Number e String podem ser usados como funções para converter um valor no tipo respetivo.
Com Boolean(value) podes converter qualquer valor num Boolean.
Existe um conjunto fixo de valores, os chamados valores falsy, que são convertidos em false.
Os mais importantes: false, 0, a string vazia, null, undefined e NaN são falsy.
Para todos os outros valores, Boolean devolve true.
A estes valores chamamos truthy.
Boolean(-1);
// => true
Boolean(0);
// => false
Boolean(' ');
// => true
Boolean('');
// => false
Repara que, devido às regras descritas, '0', 'false', [] e {} são truthy em JavaScript.
Podes usar Number(value) para converter um valor num número.
Os espaços em branco no início e no fim de uma string são ignorados e uma string vazia é convertida em 0.
Se tentares converter um valor não primitivo ou uma string que não representa um número, o resultado é NaN (Not-A-Number).
Number(' -12.34 ');
// => -12.34
Number('1,2');
// => NaN
Number('');
// => 0
Number({ num: 123 });
// => NaN
Com String(value) podes converter um valor numa string.
Para valores primitivos, o resultado é o que esperarias.
String(12.34);
// => '12.34'
String(false);
// => 'false'
String(null);
// => 'null'
String(undefined);
// => 'undefined'
No caso dos arrays, a função String aplica a conversão para string a cada elemento e junta os resultados com uma vírgula.
Também podes aplicar tu o método join, por exemplo, para personalizares o separador.
Repara que, nestes casos, null e undefined são convertidos numa string vazia.
String([42, null, true, 'abc']);
// => '42,,true,abc'
No caso dos objetos, por predefinição, String devolve um texto pouco útil.
String({ key: 'value' });
// => '[object Object]'
Em certos contextos, o JavaScript converte automaticamente um valor noutro tipo de dados antes de avaliar uma instrução. A esta conversão implícita chamamos coerção de tipos.
Quando um valor não Boolean é usado num contexto Boolean, o JavaScript aplica as mesmas regras da função Boolean para converter o valor implicitamente.
A coerção para Boolean ocorre habitualmente:
?
!
&& e OR || (o resultado da expressão é um dos operandos, não necessariamente um Boolean)const num = 0;
if (num) {
// this block is NOT executed because 0 is falsy
}
Se o operador de adição + for usado com valores primitivos e um dos operandos for uma string, o outro também será coagido para string.
A lógica de conversão é a mesma da função String.
Depois, as duas strings são concatenadas.
let name;
'hello ' + name;
// => 'hello undefined'
Muitos operadores coagem os operandos em números (se necessário) segundo a lógica da função Number explicada acima.
+ (se não estiver envolvida nenhuma string), -, *, /, %, **
+, -
>, >=, <, <=
|, &, ^, ~
Consulta a lista de operadores da MDN para mais detalhes sobre qualquer um destes operadores.
Para evitar erros, é boa prática chamar Number explicitamente antes de aplicar estes operadores.
O teu amigo Kojo é um grande fã de números. Tem um pequeno site chamado 'fun-with-numbers'. O Kojo não é muito bom a programar, por isso pediu-te ajuda.
Vais criar duas funções auxiliares para novos jogos de números no site do Kojo e uma terceira para validar os valores de entrada que o utilizador pode introduzir.
Um dos jogos do site do Kojo parece uma máquina de slots que mostra dois grupos de rodas com algarismos. Cada grupo de algarismos representa um número. Para a mecânica do jogo, o Kojo precisa de saber a soma desses dois números.
Escreve uma função twoSum que aceita dois arrays como parâmetros.
Cada array é composto por um ou mais números entre 0 e 9.
A função deve interpretar cada array como um número e devolver a soma desses dois números.
twoSum([1, 2, 3], [0, 7]);
//=> 130
// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130
Outro jogo do site é um pequeno questionário chamado "Lucky Numbers". O utilizador pode introduzir um número e depois vê se esse número pertence a uma sequência ou padrão secreto. A sequência ou padrão dos números da sorte muda todos os meses e cada utilizador só tem um número limitado de tentativas para o adivinhar.
Os números da sorte deste mês devem ser números que são palíndromos. Um número palindrómico continua igual quando se invertem os algarismos.
Implementa a nova função luckyNumber que aceita um número como parâmetro.
A função deve devolver true se o número for um palíndromo e false caso contrário.
O número de entrada será sempre um inteiro positivo.
luckyNumber(1441);
//=> true
luckyNumber(123);
//=> false
Em vários locais do site, há campos de entrada onde os utilizadores podem introduzir números e clicar num botão para desencadear uma ação. O Kojo quer melhorar a experiência do utilizador do seu site. Quer mostrar uma mensagem de erro caso o utilizador clique no botão mas o campo contenha um valor de entrada inválido.
Eis mais alguma informação sobre como é fornecido o valor de um campo de entrada.
undefined ou null.Escreve uma função errorMessage que aceita os valores de entrada do utilizador como parâmetro.
Se o utilizador não fornecer nenhum valor de entrada, errorMessage deve devolver 'Required field'.
Se o valor de entrada não representar um número diferente de zero (de acordo com as regras de conversão do JavaScript), deve ser devolvido 'Must be a number besides 0'.
Em todos os outros casos, podes assumir que o valor de entrada é válido; o valor devolvido deve ser uma string vazia.
errorMessage('123');
// => ''
errorMessage('');
// => 'Required field'
errorMessage('abc');
// => 'Must be a number besides 0'
Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.