Ma'lumot turlarining avtomatik o'zgartirilishi
Siz allaqachon bilasizki, JavaScriptda satrlar tirnoq ichiga olinishi kerak. Satrning barcha belgilari raqamlardan iborat bo'lishi mumkin:
let a = '123';
Bunda a o'zgaruvchisi ham satr hisoblanadi,
lekin bir nuans bilan.
Nuans shundan iboratki: agar raqamlardan iborat satr ustida qandaydir matematik amal bajarilsa - bu amal xuddi bizda haqiqatan ham raqamlar bordek, satrlar emasdek bajariladi:
alert('2' * '3'); // 6 ni chiqaradi
Bunda JavaScript biz satrlar uchun noqonuniy, lekin raqamlar uchun qonuniy bo'lgan amalni bajarishga harakat qilayotganimizni ko'radi.
Shuningdek, u bizning satrlarimiz aslida tirnoq ichidagi raqamlar ekanligini ko'radi. Shuning uchun JavaScript ushbu satrlarni avtomatik ravishda raqamlarga o'zgartiradi va ular ustida tegishli matematik amalni bajaradi.
Bu faqat satrlarimiz faqat raqamlardan iborat bo'lsa ishlaydi.
Agar u yerda kamida bitta harf bo'lsa
- JavaScript amalni noto'g'ri deb hisoblaydi
va uning natijasi NaN qiymati bo'ladi:
alert('2' * '3s'); // NaN ni chiqaradi
Bundan tashqari, avtomatik o'zgartirish amal matematik jihatdan to'g'ri bo'lsa, lekin satrlar uchun noqonuniy bo'lsa ham sodir bo'ladi.
Masalan, satrlarni (ammo raqamlarni mumkin) ko'paytirish, bo'lish, ayirish mumkin emas, shuning uchun barcha bunday amallarda raqamli satrlarning raqamlarga avtomatik o'zgartirilishi sodir bo'ladi.
Biroq, satrlar, xuddi raqamlar kabi, + operatori yordamida
qo'shiladi. Bu shuni anglatadiki,
qo'shish amalida avtomatik o'zgartirish
bo'lmaydi:
let a = '1' + '2';
alert(a); // '12' ni chiqaradi - satrlar qo'shildi
Agar qo'shiluvchilardan biri raqam, ikkinchisi - satr bo'lsa, har doim satr g'alaba qozonadi:
let a = 1 + '2';
alert(a); // '12' ni chiqaradi
Bunday hollarda JavaScript, aksincha, avtomatik ravishda raqamlarni satrlarga o'zgartiradi va satrlarni qo'shish amalini bajaradi.
Biroq, qo'shiluvchilar ikkitadan ko'p bo'lsa, nuanslar mavjud: bunda ma'lum turga o'zgartirish amallarning bajarilish tartibiga bog'liq.
Quyidagi misolda avval 2 va 3
raqamlar sifatida qo'shiladi, so'ngra natija
'1' satriga '5' satri sifatida qo'shiladi,
bu esa oxir-oqibat '15' satrini beradi:
let a = '1' + (2 + 3);
alert(a); // '15' ni chiqaradi
Agar qavslar olib tashlansa, hamma narsa chapdan o'ngga qo'shiladi.
Ya'ni avval '1' satriga
2 raqami qo'shiladi va natijada
'12' satri hosil bo'ladi. Keyin bu
satrga 3 raqami qo'shiladi va natijada
'123' satri hosil bo'ladi:
let a = '1' + 2 + 3;
alert(a); // '123' ni chiqaradi
Quyidagi misolda esa 2
va 3 raqamlari boshida yozilgan, shuning uchun avval
ular raqamlar sifatida qo'shiladi, natijada
5 raqami hosil bo'ladi, so'ngra bu raqamga
'1' satri qo'shiladi, natijada '51' satri hosil bo'ladi:
let a = 2 + 3 + '1';
alert(a); // '51' ni chiqaradi
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' + '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' + 2;
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = 5 + '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = 5 + 2;
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' * '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' - '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' / '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' % '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5s' * '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5s' + '2';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = (-'5') + (-'2');
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' * 1 + '2' * 1;
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '5' * '1' + '2' * '1';
alert(a);
Kodni ishlamasdan, ekranga nima chiqishini aniqlang:
let a = '' + 3 + 1;
alert(a);