Outomatiese tipe-omskakeling van data
Soos jy reeds weet, moet strings in JavaScript in aanhalingstekens geplaas word. Dit kan gebeur dat al die karakters van die string syfers is:
let a = '123';
In hierdie geval is die veranderlike a ook 'n
string, maar met 'n sekere nuanse.
Die kern van die nuanse is die volgende: as jy 'n aritmetiese bewerking op 'n string met syfers uitvoer - sal hierdie bewerking uitgevoer word asof ons regtig getalle het, en nie strings nie:
alert('2' * '3'); // sal 6 vertoon
In hierdie geval sien JavaScript dat ons probeer om 'n ongeldige bewerking vir strings uit te voer, maar wat geldig is vir getalle.
Dit sien ook dat ons strings eintlik - getalle in aanhalingstekens is. Daarom voer JavaScript outomaties die omskakeling van hierdie strings na getalle uit en voer die ooreenstemmende aritmetiese bewerking daarop uit.
Dit werk slegs as daar net syfers in ons strings is.
As daar ten minste een letter in is
- sal JavaScript die bewerking as onkorrek beskou
en die waarde NaN as resultaat gee:
alert('2' * '3s'); // sal NaN vertoon
Daarbenewens vind outomatiese omskakeling plaas as die bewerking wiskundig korrek is, maar ongeldig vir strings.
Byvoorbeeld, strings kan nie (maar getalle kan) vermenigvuldig, verdeel, aftrek nie, dus in alle sulke bewerkings sal daar outomatiese omskakeling van strings met syfers na getalle wees.
Maar, strings, net soos getalle, kan opgetel word
met behulp van die operateur +. Dit beteken
dat in die geval van optel geen outomatiese omskakeling
sal plaasvind nie:
let a = '1' + '2';
alert(a); // sal '12' vertoon - string-optelling het plaasgevind
As een van die getalle 'n getal is, en die ander - 'n string, dan wen die string altyd:
let a = 1 + '2';
alert(a); // sal '12' vertoon
In sulke gevalle omskakel JavaScript, inteendeel, outomaties die getalle na strings en voer die optelling van strings uit.
Daar is egter nuanses wanneer daar meer as twee getalle is: in hierdie geval hang die omskakeling na 'n spesifieke tipe af van die volgorde van bewerkings.
In die volgende voorbeeld sal 2 en 3
eers as getalle bymekaar getel word, en dan sal die resultaat by
die string '1' gevoeg word reeds as string '5',
wat uiteindelik die string '15' sal gee:
let a = '1' + (2 + 3);
alert(a); // sal '15' vertoon
As jy egter die hakies verwyder, sal alles van
links na regs bymekaar getel word. Dit beteken eers sal die getal 2
by die string '1' gevoeg word en as gevolg
daarvan sal die string '12' ontstaan. Dan sal die getal 3
by hierdie string gevoeg word en as gevolg
daarvan sal die string '123' ontstaan:
let a = '1' + 2 + 3;
alert(a); // sal '123' vertoon
Maar in die volgende voorbeeld is die getalle 2
en 3 aan die begin geskryf, dus sal hulle eers
as getalle bymekaar getel word, wat die getal 5 as resultaat sal gee,
en dan sal die string '1' by hierdie getal gevoeg word,
wat uiteindelik die string '51' sal gee:
let a = 2 + 3 + '1';
alert(a); // sal '51' vertoon
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' + '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' + 2;
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = 5 + '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = 5 + 2;
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' * '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' - '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' / '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' % '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5s' * '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5s' + '2';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = (-'5') + (-'2');
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' * 1 + '2' * 1;
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '5' * '1' + '2' * '1';
alert(a);
Sonder om die kode te laat loop, bepaal wat op die skerm vertoon sal word:
let a = '' + 3 + 1;
alert(a);