Em JavaScript, os valores podem ser de tipos diferentes. Mudar o tipo de uma variável pode ser feito com uma conversão de tipo explícita. Além disso, o JavaScript também realiza uma coerção de tipo (conversão de tipo implícita) quando o contexto exige.
O JavaScript não tem um construto para converter um valor em um tipo (diferente), como acontece em muitas outras linguagens, mas alguns auxiliares internos podem ser usados no lugar.
Os exemplos mais notáveis são Boolean, Number e String, que podem ser usados como funções para converter um valor no tipo correspondente.
Com Boolean(value), você pode converter qualquer valor em um Boolean.
Existe um conjunto fixo de valores, os chamados valores falsy, que se convertem em false.
O mais importante: false, 0, string vazia, null, undefined e NaN são falsy.
Para todos os outros valores, Boolean retorna true.
Esses valores são chamados de truthy.
Boolean(-1);
// => true
Boolean(0);
// => false
Boolean(' ');
// => true
Boolean('');
// => false
Repare que, por causa das regras descritas, '0', 'false', [] e {} são truthy em JavaScript.
Number(value) pode ser usado para converter um valor em um número.
Espaços em branco no início e no fim de uma string são ignorados, e uma string vazia é convertida em 0.
Se você tentar 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), você pode converter um valor em uma string.
Para valores primitivos, o resultado é o que você esperaria.
String(12.34);
// => '12.34'
String(false);
// => 'false'
String(null);
// => 'null'
String(undefined);
// => 'undefined'
No caso de arrays, a função String aplica a conversão para string em cada elemento e junta os resultados com uma vírgula.
Você também pode aplicar o próprio método join, por exemplo, para personalizar o separador.
Repare que, nesses casos, null e undefined são convertidos em uma string vazia.
String([42, null, true, 'abc']);
// => '42,,true,abc'
No caso de objetos, por padrão String retorna um texto pouco útil.
String({ key: 'value' });
// => '[object Object]'
Em certos contextos, o JavaScript converte automaticamente um valor em outro tipo de dado antes de avaliar uma instrução. Essa conversão implícita é chamada de coerção de tipo.
Quando um valor que não é Boolean é usado em um contexto Boolean, o JavaScript aplica as mesmas regras da função Boolean para converter o valor implicitamente.
A coerção para Boolean costuma acontecer em:
?
!
&& 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á convertido em string.
A lógica de conversão é a mesma da função String.
Depois disso, as duas strings são concatenadas.
let name;
'hello ' + name;
// => 'hello undefined'
Muitos operadores convertem os operandos em números (se necessário) seguindo a lógica da função Number explicada acima.
+ (se não houver string envolvida), -, *, /, %, **
+, -
>, >=, <, <=
|, &, ^, ~
Consulte a lista de operadores da MDN para mais detalhes sobre qualquer um desses operadores.
Para evitar erros, é uma boa prática sempre chamar Number explicitamente antes de aplicar esses operadores.
Seu amigo Kojo é um grande fã de números. Ele tem um pequeno site chamado 'fun-with-numbers'. Kojo não é muito bom em programação, então pediu sua ajuda.
Você vai criar duas funções auxiliares para novos jogos de números no site do Kojo e uma terceira para validar uma entrada que o usuário pode digitar.
Um dos jogos no site do Kojo parece um caça-níqueis que mostra dois grupos de roletas com dígitos. Cada grupo de dígitos representa um número. Para a mecânica do jogo, Kojo precisa saber a soma desses dois números.
Escreva uma função twoSum que aceita dois arrays como parâmetros.
Cada array consiste em um ou mais números entre 0 e 9.
A função deve interpretar cada array como um número e retornar 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 no site é um pequeno quiz chamado "Lucky Numbers". Um usuário pode digitar um número e então vê se o número pertence a alguma sequência ou padrão secreto. A sequência ou o padrão dos "lucky numbers" muda a cada mês, e cada usuário tem apenas um número limitado de tentativas para adivinhar.
Os lucky numbers deste mês devem ser números que são palíndromos. Números palindrômicos permanecem iguais quando os dígitos são invertidos.
Implemente a nova função luckyNumber que aceita um número como parâmetro.
A função deve retornar 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 lugares do site, há campos de entrada onde os usuários podem digitar números e clicar em um botão para acionar alguma ação. Kojo quer melhorar a experiência do usuário no site dele. Ele quer mostrar uma mensagem de erro caso o usuário clique no botão, mas o campo contenha um valor de entrada inválido.
Aqui estão mais algumas informações sobre como o valor de um campo de entrada é fornecido.
undefined ou null.Escreva uma função errorMessage que aceita a entrada do usuário como parâmetro.
Se o usuário não forneceu nenhuma entrada, errorMessage deve retornar 'Required field'.
Se a entrada não representa um número diferente de zero (de acordo com as regras de conversão do JavaScript), 'Must be a number besides 0' deve ser retornado.
Em todos os outros casos, você pode assumir que a entrada é válida, o valor de retorno deve ser uma string vazia.
errorMessage('123');
// => ''
errorMessage('');
// => 'Required field'
errorMessage('abc');
// => 'Must be a number besides 0'
Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.