Conversão Automática de Tipos de Dados
Como você já sabe, strings em JavaScript devem ser colocadas entre aspas. Pode acontecer que todos os caracteres da string sejam dígitos:
let a = '123';
Neste caso, a variável a também é uma
string, mas com uma nuance.
A essência da nuance é a seguinte: se uma operação matemática for executada em uma string com dígitos - essa operação será executada como se tivéssemos números de verdade, e não strings:
alert('2' * '3'); // exibirá 6
Neste caso, o JavaScript vê que estamos tentando executar uma operação inválida para strings, mas válida para números.
Ele também vê que, na verdade, nossas strings são números entre aspas. Portanto, o JavaScript realiza automaticamente a conversão dessas strings para números e executa a operação matemática correspondente sobre eles.
Isso funciona se nossas strings contiverem apenas
dígitos. Se houver pelo menos uma letra
- o JavaScript considerará a operação incorreta
e resultará no valor NaN:
alert('2' * '3s'); // exibirá NaN
Além disso, a conversão automática ocorre se a operação for matematicamente correta, mas inválida para strings.
Por exemplo, strings não podem (mas números podem) ser multiplicadas, divididas, subtraídas, portanto, em todas essas operações haverá conversão automática de strings com dígitos para números.
No entanto, strings, assim como números, são somadas
usando o operador +. Isso significa
que, no caso da adição, não haverá conversão automática:
let a = '1' + '2';
alert(a); // exibirá '12' - ocorreu a concatenação de strings
Se um dos operandos for um número e o outro - uma string, a string sempre prevalece:
let a = 1 + '2';
alert(a); // exibirá '12'
Nesses casos, o JavaScript, ao contrário, converte automaticamente os números em strings e executa a concatenação de strings.
No entanto, há nuances quando há mais operandos do que dois: nesse caso, a conversão para um tipo específico depende da ordem de execução das operações.
No exemplo a seguir, primeiro 2 e 3
serão somados como números, e então o resultado será adicionado
à string '1' já como a string '5',
o que, no final, resultará na string '15':
let a = '1' + (2 + 3);
alert(a); // exibirá '15'
Se os parênteses forem removidos, tudo será somado
da esquerda para a direita. Ou seja, primeiro o número 2
será adicionado à string '1' e o resultado
será a string '12'. Então, o número 3
será adicionado a esta string e o resultado
será a string '123':
let a = '1' + 2 + 3;
alert(a); // exibirá '123'
Mas no exemplo a seguir, os números 2
e 3 estão no início, então primeiro
eles serão somados como números, resultando
no número 5, e então a string '1'
será adicionada a este número, resultando na string '51':
let a = 2 + 3 + '1';
alert(a); // exibirá '51'
Sem executar o código, determine o que será exibido na tela:
let a = '5' + '2';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5' + 2;
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = 5 + '2';
alert(a);
Sem executar o código, determine o que será exibito na tela:
let a = 5 + 2;
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5' * '2';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5' - '2';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5' / '2';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5' % '2';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5s' * '2';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5s' + '2';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = (-'5') + (-'2');
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5' * 1 + '2' * 1;
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '5' * '1' + '2' * '1';
alert(a);
Sem executar o código, determine o que será exibido na tela:
let a = '' + 3 + 1;
alert(a);