Automatische typeconversie
Zoals je al weet, moeten strings in JavaScript tussen aanhalingstekens staan. Het kan zijn dat alle tekens van de string cijfers zijn:
let a = '123';
In dit geval is de variabele a ook een
string, maar met een nuance.
De nuance is als volgt: als je een wiskundige bewerking uitvoert op een string met cijfers - zal deze bewerking worden uitgevoerd alsof we echt getallen hebben, en niet strings:
alert('2' * '3'); // geeft 6 weer
In dit geval ziet JavaScript dat we proberen een ongeldige bewerking voor strings, maar geldig voor getallen, uit te voeren.
Het ziet ook dat onze strings feitelijk - getallen tussen aanhalingstekens zijn. Daarom voert JavaScript automatisch de conversie van deze strings naar getallen uit en voert de corresponderende wiskundige bewerking op ze uit.
Dit werkt als onze strings alleen
cijfers bevatten. Als er tenminste één letter in zit
- zal JavaScript de bewerking als incorrect beschouwen
en het resultaat de waarde NaN geven:
alert('2' * '3s'); // geeft NaN weer
Bovendien vindt automatische conversie plaats als de bewerking wiskundig correct is, maar ongeldig voor strings.
Strings kunnen bijvoorbeeld niet (maar getallen wel) vermenigvuldigd, gedeeld, afgetrokken worden, daarom zal in al zulke bewerkingen automatische conversie van strings met cijfers naar getallen plaatsvinden.
Echter, strings, net als getallen, worden opgeteld
met de operator +. Dit betekent
dat in het geval van optelling er geen automatische conversie
zal zijn:
let a = '1' + '2';
alert(a); // geeft '12' weer - er vond optelling van strings plaats
Als een van de termen een getal is, en de andere - een string, dan wint altijd de string:
let a = 1 + '2';
alert(a); // geeft '12' weer
In dergelijke gevallen converteert JavaScript, integendeel, automatisch de getallen naar strings en voert de optelling van strings uit.
Er zijn echter nuances, wanneer er meer termen zijn dan twee: in dit geval hangt de conversie naar een bepaald type af van de volgorde van bewerkingen.
In het volgende voorbeeld zullen eerst 2 en 3
worden opgeteld als getallen, en dan wordt het resultaat opgeteld
bij de string '1' al als string '5',
wat uiteindelijk de string '15' geeft:
let a = '1' + (2 + 3);
alert(a); // geeft '15' weer
Als je de haakjes verwijdert, dan zal alles
van links naar rechts worden opgeteld. Dat wil zeggen, eerst bij de string '1'
wordt het getal 2 opgeteld en als resultaat
krijg je de string '12'. Vervolgens wordt bij deze
string het getal 3 opgeteld en als resultaat
krijg je de string '123':
let a = '1' + 2 + 3;
alert(a); // geeft '123' weer
Maar in het volgende voorbeeld staan de getallen 2
en 3 aan het begin, dus eerst
worden ze opgeteld als getallen, wat als resultaat
het getal 5 geeft, en dan wordt bij dit getal de
string '1' opgeteld, wat uiteindelijk de string '51' geeft:
let a = 2 + 3 + '1';
alert(a); // geeft '51' weer
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' + '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' + 2;
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = 5 + '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = 5 + 2;
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' * '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' - '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' / '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' % '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5s' * '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5s' + '2';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = (-'5') + (-'2');
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' * 1 + '2' * 1;
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '5' * '1' + '2' * '1';
alert(a);
Zonder de code uit te voeren, bepaal wat er op het scherm wordt weergegeven:
let a = '' + 3 + 1;
alert(a);