Automatisk typkonvertering
Som du redan vet ska strängar i JavaScript omges av citationstecken. Det kan hända att alla tecken i strängen är siffror:
let a = '123';
I detta fall är variabeln a också en
sträng, men med en viss nyans.
Kärnan i nyansen är följande: om du utför en matematisk operation på en sträng med siffror - kommer denna operation att utföras som om vi verkligen hade siffror, och inte strängar:
alert('2' * '3'); // visar 6
I detta fall ser JavaScript att vi försöker utföra en ogiltig operation för strängar, men giltig för siffror.
Det ser också att våra strängar faktiskt är siffror inom citationstecken. Därför utför JavaScript automatiskt en konvertering av dessa strängar till siffror och utför motsvarande matematisk operation på dem.
Detta fungerar om våra strängar bara
innehåller siffror. Om det finns minst en bokstav där
- kommer JavaScript att anse operationen ogiltig
och göra resultatet till värdet NaN:
alert('2' * '3s'); // visar NaN
Dessutom sker automatisk konvertering om operationen är matematiskt korrekt, men ogiltig för strängar.
Till exempel kan strängar inte (men siffror kan) multipliceras, delas, subtraheras, därför kommer i alla sådana operationer automatisk konvertering av strängar med siffror till nummer att ske.
Däremot kan strängar, precis som siffror, adderas
med hjälp av operatorn +. Det betyder
att i fallet med addition kommer ingen automatisk konvertering
att ske:
let a = '1' + '2';
alert(a); // visar '12' - strängaddition ägde rum
Om en av termerna är ett nummer och den andra - en sträng, vinner alltid strängen:
let a = 1 + '2';
alert(a); // visar '12'
I sådana fall konverterar JavaScript, tvärtom, automatiskt siffror till strängar och utför addition av strängar.
Det finns dock nyanser när det finns fler termer än två: i detta fall beror konverteringen till en specifik typ på operationsordningen.
I följande exempel kommer 2 och 3
först att adderas som siffror, och sedan kommer resultatet att adderas
till strängen '1' redan som strängen '5',
vilket i slutändan ger strängen '15':
let a = '1' + (2 + 3);
alert(a); // visar '15'
Om man dock tar bort parenteserna kommer allt att adderas
från vänster till höger. Det vill säga, först kommer strängen '1'
att adderas med numret 2 och som ett resultat
kommer strängen '12' att erhållas. Sedan kommer
detta sträng att adderas med numret 3 och som ett resultat
kommer strängen '123' att erhållas:
let a = '1' + 2 + 3;
alert(a); // visar '123'
Men i följande exempel står siffrorna 2
och 3 i början, så först
kommer de att adderas som siffror, vilket ger som resultat
siffran 5, och sedan kommer
strängen '1' att adderas till detta nummer,
vilket ger strängen '51' som ett resultat:
let a = 2 + 3 + '1';
alert(a); // visar '51'
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' + '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' + 2;
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = 5 + '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = 5 + 2;
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' * '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' - '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' / '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' % '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5s' * '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5s' + '2';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = (-'5') + (-'2');
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' * 1 + '2' * 1;
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '5' * '1' + '2' * '1';
alert(a);
Utan att köra koden, bestäm vad som kommer att visas på skärmen:
let a = '' + 3 + 1;
alert(a);