Veri Tiplerinin Otomatik Dönüşümü
Bildiğiniz gibi, JavaScript'teki dizeler tırnak içine alınmalıdır. Dizedeki tüm karakterlerin rakam olması durumu olabilir:
let a = '123';
Bu durumda, a değişkeni de bir dizedir,
ancak bir nüansla.
Nüans şudur: rakamlardan oluşan bir dize üzerinde herhangi bir matematiksel işlem yapılırsa - bu işlem, sanki gerçekten sayılarımız varmış gibi, dizeler değilmiş gibi yapılacaktır:
alert('2' * '3'); // 6 yazacaktır
Bu durumda JavaScript, dizeler için geçersiz, ancak sayılar için geçerli bir işlem yapmaya çalıştığımızı görür.
Ayrıca, dizelerimizin aslında tırnak içindeki sayılar olduğunu görür. Bu nedenle JavaScript bu dizeleri otomatik olarak sayılara dönüştürür ve üzerlerinde ilgili matematiksel işlemi gerçekleştirir.
Bu, yalnızca dizelerimizde sadece rakamlar varsa
çalışır. Eğer en az bir harf varsa
- JavaScript işlemi geçersiz sayacak
ve sonucu NaN değeri yapacaktır:
alert('2' * '3s'); // NaN yazacaktır
Ayrıca, işlem matematiksel olarak doğruysa ama dizeler için geçersizse otomatik dönüşüm gerçekleşir.
Örneğin, dizeler (sayılar yapabilir ama) çarpılamaz, bölünemez, çıkarılamaz, bu nedenle tüm bu işlemlerde rakamlı dizelerin sayılara otomatik dönüşümü gerçekleşecektir.
Ancak, dizeler, sayılar gibi, + operatörü
kullanılarak toplanabilir. Bu, toplama durumunda
otomatik dönüşüm olmayacağı anlamına gelir:
let a = '1' + '2';
alert(a); // '12' yazacaktır - dize toplaması gerçekleşti
Toplananlardan biri sayı, diğeri dize ise, her zaman dize kazanır:
let a = 1 + '2';
alert(a); // '12' yazacaktır
Bu gibi durumlarda JavaScript, tam tersine, sayıları otomatik olarak dizelere dönüştürür ve dize toplamasını gerçekleştirir.
Ancak, toplananlar ikiden fazla olduğunda nüanslar vardır: bu durumda belirli bir türe dönüşüm, işlemlerin yürütme sırasına bağlıdır.
Aşağıdaki örnekte önce 2 ve 3
sayı olarak toplanacak, ardından sonuç
'1' dizesine zaten '5' dizesi olarak
eklenecek, bu da sonuçta '15' dizesini verecektir:
let a = '1' + (2 + 3);
alert(a); // '15' yazacaktır
Eğer parantezler kaldırılırsa, her şey
soldan sağa toplanacaktır. Yani önce '1' dizesine
2 sayısı eklenecek ve sonuçta
'12' dizesi elde edilecektir. Sonra bu
dizeye 3 sayısı eklenecek ve sonuçta
'123' dizesi elde edilecektir:
let a = '1' + 2 + 3;
alert(a); // '123' yazacaktır
Ancak aşağıdaki örnekte 2
ve 3 sayıları başta yazılıdır, bu nedenle önce
sayı olarak toplanacak, sonuçta
5 sayısını verecek, ardından bu sayıya
'1' dizesi eklenecek, sonuçta '51' dizesini verecektir:
let a = 2 + 3 + '1';
alert(a); // '51' yazacaktır
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' + '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' + 2;
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = 5 + '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = 5 + 2;
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' * '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' - '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' / '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' % '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5s' * '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5s' + '2';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = (-'5') + (-'2');
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' * 1 + '2' * 1;
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '5' * '1' + '2' * '1';
alert(a);
Kodu çalıştırmadan, ekrana ne yazılacağını belirleyin:
let a = '' + 3 + 1;
alert(a);