Mabadiliko ya Otomatiki ya Aina za Data
Kama ulivyojua tayari, strings katika JavaScript inapaswa kuchukuliwa kwenye alama za quotation. Inawezekana kuwa, herufi zote za string zitakuwa ni nambari:
let a = '123';
Katika kesi hii, variable a pia ni
string, lakini kwa nuance fulani.
Kiini cha nuance ni kifuatacho: ikiwa utafanya operesheni ya kihisabati yo yote kwenye string yenye nambari - operesheni hiyo itafanywa kana kwamba tuna nambari kweli, na sio strings:
alert('2' * '3'); // itatoa 6
Katika kesi hii, JavaScript anaona kwamba tunajaribu kufanya operesheni isiyoruhusiwa kwa strings, lakini inayoruhusiwa kwa nambari.
Yeye pia anaona kwamba kwa kweli strings zetu - ni nambari zilizo kwenye alama za quotation. Kwa hivyo JavaScript kiotomatiki hufanya mabadiliko ya strings hizi kuwa nambari na hufanya operesheni ya kihisabati inayofaa juu yazo.
Hii inafanya kazi, ikiwa kwenye strings zetu kuna
nambari pekee. Ikiwa kutakuwa na herufi angalau moja
- JavaScript itaona operesheni hiyo kuwa batili
na itafanya matokeo yake kuwa thamani NaN:
alert('2' * '3s'); // itatoa NaN
Zaidi ya hayo, mabadiliko ya otomatiki hutokea, ikiwa operesheni ni sahihi kihisabati, lakini hairuhusiwi kwa strings.
Kwa mfano, strings haziwezi (lakini nambari zinaweza) kuzidishwa, kugawanywa, kutoanishwa, kwa hivyo katika operesheni zote kama hizo utakuwa na mabadiliko ya otomatiki ya strings zenye nambari kuwa nambari.
Hata hivyo, strings, kama nambari, zinaongezwa
kwa kutumia operator +. Hii inamaanisha,
kwamba katika kesi ya kujumlisha mabadiliko ya otomatiki
hautatokea:
let a = '1' + '2';
alert(a); // itatoa '12' - kuna nyongeza ya strings
Ikiwa moja ya neno-jumlisha ni nambari, na nyingine - ni string, basi string ndiyo huwa shinda kila wakati:
let a = 1 + '2';
alert(a); // itatoa '12'
Katika kesi kama hizi, JavaScript, kinyume chake, kiotomatiki hubadilisha nambari kuwa strings na hufanya nyongeza ya strings.
Kuna, hata hivyo, nuance, wakati maneno-jumlisha ni zaidi ya mawili: katika kesi hii, mabadiliko ya aina fulani yanategemea utaratibu wa utekelezaji wa operesheni.
Katika mfano ufuatao kwanza 2 na 3
zitajumlishwa kama nambari, kisha matokeo yataongezwa
kwenye string '1' tayari kama string '5',
ambayo hatimaye itatoa string '15':
let a = '1' + (2 + 3);
alert(a); // itatoa '15'
Iwapo utaondoa mabano, basi yote yataongezwa
kushoto kwenda kulia. Yaani kwanza string '1'
itaongezwa kwa nambari 2 na kwa matokeo
itapatikana string '12'. Kisha string hii
itaongezwa kwa nambari 3 na kwa matokeo
itapatikana string '123':
let a = '1' + 2 + 3;
alert(a); // itatoa '123'
Lakini katika mfano ufuatao nambari 2
na 3 zimeandikwa mwanzoni, kwa hivyo kwanza
zitajumlishwa kama nambari, na kutoa matokeo
ya nambari 5, kisha nambari hii itaongezwa
kwa string '1', na kutoa kwa matokeo string '51':
let a = 2 + 3 + '1';
alert(a); // itatoa '51'
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' + '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' + 2;
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = 5 + '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = 5 + 2;
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' * '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' - '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' / '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' % '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5s' * '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5s' + '2';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = (-'5') + (-'2');
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' * 1 + '2' * 1;
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '5' * '1' + '2' * '1';
alert(a);
Bila kukimbiza code, amua, nini kitatolewa kwenye skrini:
let a = '' + 3 + 1;
alert(a);