Veri Tiplərinin Avtomatik Çevrilməsi
Artıq bildiyiniz kimi, JavaScript-də sətirlər dırnaq işarələri içində yazılmalıdır. Bəzən sətirin bütün simvolları rəqəmlərdən ibarət ola bilər:
let a = '123';
Bu halda a dəyişəni də sətirdir, lakin
bir nüansla.
Nüans ondadır ki, əgər rəqəmli sətir üzərində hər hansı riyazi əməliyyat yerinə yetirilsə - bu əməliyyat elə icra olunacaq ki, sanki bizim həqiqətən sətir deyil, rəqəmlərimiz var:
alert('2' * '3'); // 6 çap edəcək
Bu halda JavaScript görür ki, biz sətirlər üçün qadağan olunmuş, lakin rəqəmlər üçün icazə verilmiş əməliyyat yerinə yetirməyə çalışırıq.
O, həmçinin görür ki, əslində bizim sətirlərimiz dırnaq işarələri içində yazılmış rəqəmlərdir. Buna görə də JavaScript bu sətirləri avtomatik şəkildə rəqəmlərə çevirir və onlar üzərində müvafiq riyazi əməliyyatı yerinə yetirir.
Bu, yalnız sətirlərimizdə ancaq rəqəmlər olduqda
işləyir. Əgər orda ən azı bir hərf olarsa
- JavaScript əməliyyatı düzgün hesab etməyəcək
və onun nəticəsi kimi NaN dəyərini çap edəcək:
alert('2' * '3s'); // NaN çap edəcək
Bundan əlavə, avtomatik çevrilmə baş verir, əgər əməliyyat riyazi cəhətdən düzgündürsə, lakin sətirlər üçün icazə verilmir.
Məsələn, sətirləri vurmaq, bölmək, çıxmaq olmaz (rəqəmləri isə olar), buna görə də bütün belə əməliyyatlarda rəqəmli sətirlərin rəqəmlərə avtomatik çevrilməsi baş verəcək.
Lakin, sətirlər də, rəqəmlər kimi, + operatoru
ilə toplanır. Bu o deməkdir ki, toplama zamanı
avtomatik çevrilmə baş verməyəcək:
let a = '1' + '2';
alert(a); // '12' çap edəcək - sətirlərin toplanması baş verdi
Əgər toplananlardan biri rəqəm, digəri isə sətirdirsə, həmişə sətir qalib gəlir:
let a = 1 + '2';
alert(a); // '12' çap edəcək
Belə hallarda JavaScript, əksinə olaraq, rəqəmləri avtomatik şəkildə sətirlərə çevirir və sətirlərin toplanmasını yerinə yetirir.
Lakin, toplananların sayı ikidən çox olduqda nüanslar var: bu halda müəyyən tipə çevrilmə əməliyyatların yerinə yetirilmə sırasından asılıdır.
Aşağıdakı nümunədə əvvəlcə 2 və 3
rəqəmlər kimi toplanacaq, sonra nəticə sətir '1'-ə
artıq sətir '5' kimi əlavə olunacaq,
bu da nəticədə '15' sətirini verəcək:
let a = '1' + (2 + 3);
alert(a); // '15' çap edəcək
Əgər mötərizələri çıxarsaq, onda hər şey soldan
sağa toplanacaq. Yəni əvvəlcə sətir '1'-ə
rəqəm 2 əlavə olunacaq və nəticədə
sətir '12' alınacaq. Sonra bu sətirə
rəqəm 3 əlavə olunacaq və nəticədə
sətir '123' alınacaq:
let a = '1' + 2 + 3;
alert(a); // '123' çap edəcək
Lakin aşağıdakı nümunədə 2 və 3
rəqəmləri əvvəldə yazıldığına görə əvvəlcə
onlar rəqəmlər kimi toplanacaq, nəticədə
rəqəm 5 verəcək, sonra bu rəqəmə
sətir '1' əlavə olunacaq, nəticədə '51' sətirini verəcək:
let a = 2 + 3 + '1';
alert(a); // '51' çap edəcək
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' + '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' + 2;
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = 5 + '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = 5 + 2;
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' * '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' - '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' / '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' % '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5s' * '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5s' + '2';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = (-'5') + (-'2');
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' * 1 + '2' * 1;
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '5' * '1' + '2' * '1';
alert(a);
Kodu işə salmadan müəyyən edin ki, ekranda nə çap olunacaq:
let a = '' + 3 + 1;
alert(a);