Деректер типтерін автоматты түрлендіру
Сіз білетіндей, 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);