Automatisk typekonvertering
Som du allerede ved, skal strenge i JavaScript sættes i anførselstegn. Det kan ske, at alle tegnene i strengen er cifre:
let a = '123';
I dette tilfælde er variablen a også en
streng, men med en vis nuance.
Essensen af nuancen er følgende: hvis du udfører en matematisk operation på en streng med cifre - vil denne operation blive udført som om, vi faktisk har tal, og ikke strenge:
alert('2' * '3'); // viser 6
I dette tilfælde ser JavaScript, at vi forsøger at udføre en ugyldig operation for strenge, men en gyldig en for tal.
Det ser også, at vores strenge faktisk - er tal i anførselstegn. Derfor udfører JavaScript automatisk konvertering af disse strenge til tal og udfører den tilsvarende matematiske operation på dem.
Dette virker, hvis vores strenge kun indeholder
cifre. Hvis der er mindst ét bogstav
- vil JavaScript betragte operationen som ugyldig
og gøre dens resultat til værdien NaN:
alert('2' * '3s'); // viser NaN
Derudover sker der automatisk konvertering, hvis operationen er matematisk korrekt, men ugyldig for strenge.
For eksempel kan strenge ikke (mens tal kan) ganges, divideres, trækkes fra, så i alle sådanne operationer vil der ske automatisk konvertering af strenge med cifre til tal.
Derimod lægges strenge, ligesom tal, sammen
ved hjælp af operatoren +. Det betyder,
at i tilfælde af addition vil der ikke ske automatisk konvertering:
let a = '1' + '2';
alert(a); // viser '12' - der skete streng-koncatenering
Hvis den ene operande er et tal, og den anden - er en streng, vinder strengen altid:
let a = 1 + '2';
alert(a); // viser '12'
I sådanne tilfælde konverterer JavaScript, tværtimod, automatisk tal til strenge og udfører streng-koncatenering.
Der er dog nuancer, når der er mere end to operander: i dette tilfælde afhænger konverteringen til en bestemt type af rækkefølgen af operationer.
I det følgende eksempel vil 2 og 3
først blive lagt sammen som tal, og derefter vil resultatet blive lagt
sammen med strengen '1' allerede som strengen '5',
hvilket i sidste ende giver strengen '15':
let a = '1' + (2 + 3);
alert(a); // viser '15'
Hvis man fjerner parenteserne, vil alt blive lagt sammen
fra venstre mod højre. Det vil sige, at først vil tallet 2
blive lagt til strengen '1', og som et resultat
vil strengen '12' blive opnået. Derefter vil tallet 3
blive lagt til denne streng, og som et resultat
vil strengen '123' blive opnået:
let a = '1' + 2 + 3;
alert(a); // viser '123'
Men i det følgende eksempel står tallene 2
og 3 i starten, så først
vil de blive lagt sammen som tal, hvilket giver resultatet
tallet 5, og derefter vil strengen '1'
blive lagt til dette tal, hvilket i sidste ende giver strengen '51':
let a = 2 + 3 + '1';
alert(a); // viser '51'
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' + '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' + 2;
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = 5 + '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = 5 + 2;
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' * '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' - '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' / '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' % '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5s' * '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5s' + '2';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = (-'5') + (-'2');
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' * 1 + '2' * 1;
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '5' * '1' + '2' * '1';
alert(a);
Uden at køre koden, skal du bestemme, hvad der vil blive vist på skærmen:
let a = '' + 3 + 1;
alert(a);