Automatisk typekonvertering
Som du allerede vet, skal strenger i JavaScript stå i anførselstegn. Det kan hende at alle tegnene i strengen er sifre:
let a = '123';
I dette tilfellet er variabelen a også en
streng, men med en viss nyanse.
Poenget med nyansen er som følger: hvis du utfører en matematisk operasjon på en streng med sifre, vil denne operasjonen bli utført som om vi faktisk har tall, ikke strenger:
alert('2' * '3'); // vil vise 6
I dette tilfellet ser JavaScript at vi prøver å utføre en operasjon som er ugyldig for strenger, men gyldig for tall.
Det ser også at våre strenger faktisk er tall i anførselstegn. Derfor utfører JavaScript automatisk en konvertering av disse strengene til tall og utfører den tilsvarende matematiske operasjonen på dem.
Dette fungerer hvis strengene våre kun inneholder
sifre. Hvis det er minst en bokstav der,
vil JavaScript anse operasjonen som ugyldig
og gjøre resultatet til verdien NaN:
alert('2' * '3s'); // vil vise NaN
I tillegg skjer automatisk konvertering hvis operasjonen er matematisk korrekt, men ugyldig for strenger.
For eksempel kan ikke strenger (men tall kan) multipliseres, deleres, subtraheres, så i alle slike operasjoner vil det skje en automatisk konvertering av strenger med sifre til tall.
Derimot kan strenger, i likhet med tall, legges sammen
med operatoren +. Dette betyr
at i tilfelle addisjon vil det ikke skje automatisk konvertering:
let a = '1' + '2';
alert(a); // vil vise '12' - det skjedde en addisjon av strenger
Hvis en av leddene er et tall, og den andre - en streng, vinner strengen alltid:
let a = 1 + '2';
alert(a); // vil vise '12'
I slike tilfeller konverterer JavaScript, tvert imot, automatisk tall til strenger og utfører addisjon av strenger.
Det finnes imidlertid nyanser når det er flere ledd enn to: i dette tilfellet avhenger konverteringen til en bestemt type av rekkefølgen operasjonene utføres i.
I det følgende eksemplet vil 2 og 3
først legges sammen som tall, og deretter vil resultatet legges til
strengen '1' allerede som strengen '5',
noe som til slutt gir strengen '15':
let a = '1' + (2 + 3);
alert(a); // vil vise '15'
Hvis du fjerner parentesene, vil alt bli lagt sammen
venstre til høyre. Det vil si at først vil tallet 2
legges til strengen '1' og resultatet
blir strengen '12'. Deretter vil tallet 3
legges til denne strengen og resultatet
blir strengen '123':
let a = '1' + 2 + 3;
alert(a); // vil vise '123'
Men i det følgende eksemplet står tallene 2
og 3 i begynnelsen, så først
legges de sammen som tall, noe som gir
tallet 5, og deretter legges
strengen '1' til dette tallet,
noe som til slutt gir strengen '51':
let a = 2 + 3 + '1';
alert(a); // vil vise '51'
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' + '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' + 2;
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = 5 + '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = 5 + 2;
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' * '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' - '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' / '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' % '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5s' * '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5s' + '2';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = (-'5') + (-'2');
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' * 1 + '2' * 1;
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '5' * '1' + '2' * '1';
alert(a);
Uten å kjøre koden, bestem hva som vil vises på skjermen:
let a = '' + 3 + 1;
alert(a);