Автоматии табдили навъҳои дода
Чӣ тавр ки шумо аллакай медонед, сатрҳоро дар JavaScript бояд дар қошиш гирифт. Мумкин аст, ки тамоми аломатҳои сатр рақамҳо бошанд:
let a = '123';
Дар ин ҳолат тағйирёбандаи a инчунин сатр аст,
вале бо баъзе нюансҳо.
Маҳз нюансҳо ин аст: агар бо сатр дар бораи рақамҳо амали математикиро иҷро карда шавад - ин амалиёт иҷро хоҳад шуд, ки гӯё мо воқеан рақамҳо дорем, на сатрҳо:
alert('2' * '3'); // 6-ро хориҷ мекунад
Дар ин ҳолат JavaScript мебинад, ки мо кӯшиш мекунем амали ноҷоизро барои сатрҳо, вале ҷоизиро барои рақамҳо иҷро кунем.
Инчунин мебинад, ки воқеан сатрҳои мо - ин рақамҳо дар қошишҳо мебошанд. Аз ин рӯ JavaScript автоматан табдили ин сатрҳоро ба рақамҳо иҷро мекунад ва амали математикии мувофиқро ба онҳо иҷро мекунад.
Ин кор мекунад, агар дар сатрҳои мо танҳо
рақамҳо бошанд. Агар дар он ҳарф бошад
- JavaScript амалиётро нодуруст ҳисоб карда
ва онро ба қимати NaN табдил медиҳад:
alert('2' * '3s'); // NaN-ро хориҷ мекунад
Ба ғайр аз он, табдили автоматикӣ рух медиҳад, агар амалиёт аз ҷиҳати математикӣ дуруст бошад, вале барои сатрҳо ноҷоиз бошад.
Масалан, сатрҳоро наметавон (аммо рақамҳоро метавон) зарб кард, тақсим кард, кам кард, аз ин рӯ дар ҳамаи чунин амалиётҳо табдили автоматии сатрҳо бо рақамҳо ба рақамҳо хоҳад буд.
Аммо, сатрҳо, монанди рақамҳо, бо истифода аз оператори + ҷамъ карда мешаванд.
Ин маъно дорад,
ки дар ҳолати ҷамъ кардан табдили автоматикӣ
нахоҳад буд:
let a = '1' + '2';
alert(a); // '12'-ро хориҷ мекунад - ҷамъи сатрҳо рух дод
Агар яке аз ҷамъшавандаҳо рақам бошад, ва дигаре - сатр бошад, пас ҳамеша сатр пирӯз мешавад:
let a = 1 + '2';
alert(a); // '12'-ро хориҷ мекунад
Дар чунин ҳолатҳо JavaScript, баръакс, автоматикӣ рақамҳоро ба сатрҳо табдил дода ва ҷамъи сатрҳоро иҷро мекунад.
Аммо, нюансҳое ҳастанд, вақте ки ҷамъшавандаҳо зиёдтар бошанд, аз ду: дар ин ҳолат табдил ба навъи муайян ба тартиби иҷрои амалиётҳо вобаста аст.
Дар намунаи оянда аввал 2 ва 3
ҳамчун рақамҳо ҷамъ карда мешаванд, ва пас натиҷа ба
сатр '1' ҳамчун сатр '5' илова хоҳад шуд,
ки дар натиҷа сатр '15' медиҳад:
let a = '1' + (2 + 3);
alert(a); // '15'-ро хориҷ мекунад
Агар қавсҳо тоза карда шаванд, пас ҳама чиз
аз чап ба рост ҷамъ карда мешавад. Яъне аввал ба сатр '1'
рақами 2 илова карда мешавад ва дар натиҷа
сатр '12' ҳосил мешавад. Сипас ба ин
сатр рақами 3 илова карда мешавад ва дар натиҷа
сатр '123' ҳосил мешавад:
let a = '1' + 2 + 3;
alert(a); // '123'-ро хориҷ мекунад
Аммо дар намунаи оянда рақамҳои 2
ва 3 дар оғоб навишта шудаанд, аз ин рӯ аввал
онҳо ҳамчун рақамҳо ҷамъ карда мешаванд, дар натиҷа
рақами 5 медиҳанд, ва сипас ба ин рақам
сатр '1' илова карда мешавад, дар охир сатр '51' медиҳад:
let a = 2 + 3 + '1';
alert(a); // '51'-ро хориҷ мекунад
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' + '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' + 2;
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = 5 + '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = 5 + 2;
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' * '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' - '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' / '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' % '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5s' * '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5s' + '2';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = (-'5') + (-'2');
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' * 1 + '2' * 1;
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '5' * '1' + '2' * '1';
alert(a);
Бе оғози рамз, муайян кунед, ки чӣ ба экран хориҷ карда мешавад:
let a = '' + 3 + 1;
alert(a);