
İçindekiler
JavaScript, dinamik tiplendirmeye sahip, esnek ve güçlü bir programlama dilidir. Dinamik tiplendirme sayesinde bir değişkenin türü, değerine göre çalışma zamanında belirlenir. Bu da geliştiricilere büyük esneklik sunarken, bazı durumlarda hata yapma olasılığını artırabilir. Özellikle kullanıcıdan alınan veriler, API’den gelen içerikler veya form girdileri üzerinde işlem yapmadan önce, bu verilerin türünü doğru şekilde kontrol etmek ve gerekirse dönüştürmek oldukça önemlidir. Bu yazıda, değişken türünü kontrol etme yöntemlerinden başlayarak, farklı tür dönüşümleri ve bu dönüşümlerin gerçek hayattaki kullanım senaryoları üzerinde duracağız.
Değişken Türünü Kontrol Etme
JavaScript’te bir değişkenin türünü anlamanın birkaç farklı yolu vardır. Bunlardan bazıları typeof
, instanceof
ve Array.isArray()
gibi operatör ve fonksiyonlardır. Her birinin farklı kullanım alanları ve dikkat edilmesi gereken noktaları vardır.
typeof Operatörü
typeof
operatörü, bir değişkenin türünü string olarak döner. Sayılar, metinler, boolean ifadeler ve undefined
gibi temel türlerde oldukça başarılıdır.
let isim = "Ahmet";
console.log(typeof isim); // string
let yas = 25;
console.log(typeof yas); // number
let aktif = true;
console.log(typeof aktif); // boolean
let bos = null;
console.log(typeof bos); // object (JavaScript'te bilinen bir bug)
let tanimsiz;
console.log(typeof tanimsiz); // undefined
Yukarıdaki örneklerden de görülebileceği gibi, typeof null
çıktısı “object” olur. Bu, JavaScript dilinin eski sürümlerinden kalan bilinen bir hatadır ve hala düzeltilmemiştir.
Array ve Null Kontrolü
Diziler de birer nesne olduğu için typeof
ile kontrol edildiğinde “object” sonucu alınır. Bu nedenle dizi olup olmadığını anlamanın en güvenilir yolu Array.isArray()
fonksiyonudur.
let dizi = [1, 2, 3];
console.log(Array.isArray(dizi)); // true
let veri = null;
console.log(veri === null); // true
instanceof Operatörü
instanceof
, bir nesnenin belirli bir constructor fonksiyonunun örneği olup olmadığını kontrol eder. Özellikle nesne tabanlı yapılarla çalışırken çok faydalıdır.
let tarih = new Date();
console.log(tarih instanceof Date); // true
let dizi2 = [];
console.log(dizi2 instanceof Array); // true
let obje = {};
console.log(obje instanceof Object); // true
Object.prototype.toString
Daha detaylı tür kontrolü için Object.prototype.toString.call()
yöntemi kullanılabilir. Bu yöntemle tüm veri türleri açıkça görülebilir.
console.log(Object.prototype.toString.call("Merhaba")); // [object String]
console.log(Object.prototype.toString.call(42)); // [object Number]
console.log(Object.prototype.toString.call([])); // [object Array]
Değişken Türünü Değiştirme (Tip Dönüşümleri)
JavaScript’te tip dönüşümleri iki şekilde yapılabilir:
- Otomatik (implicit) dönüşüm: JavaScript tarafından kendiliğinden yapılır.
- Açık (explicit) dönüşüm: Geliştirici tarafından manuel yapılır.
Sayıya Dönüştürme
Metin veya boolean gibi türleri sayıya dönüştürmek için Number()
, parseInt()
, parseFloat()
veya +
operatörü kullanılabilir.
let sayiString = "42";
let sayi1 = Number(sayiString); // 42
let sayi2 = parseInt(sayiString); // 42
let sayi3 = +sayiString; // 42
let ondalik = "3.14";
let sayi4 = parseFloat(ondalik); // 3.14
Metne Dönüştürme
Bir değişkeni metne çevirmek için String()
fonksiyonu veya .toString()
metodu kullanılabilir.
let sayi = 123;
let metin1 = String(sayi); // "123"
let metin2 = sayi.toString(); // "123"
let dogruMu = true;
console.log(String(dogruMu)); // "true"
Boolean’a Dönüştürme
Aşağıdaki değerler JavaScript’te “falsy” olarak kabul edilir: ""
, 0
, null
, undefined
, NaN
, false
. Geri kalan tüm değerler “truthy”‘dir.
let durum = "";
let sonuc = Boolean(durum); // false
let deger = "merhaba";
console.log(Boolean(deger)); // true
console.log(Boolean(0)); // false
console.log(Boolean(1)); // true
Otomatik Tip Dönüşümü Örnekleri
JavaScript bazı durumlarda değişken türünü otomatik olarak dönüştürür. Bu durumlar özellikle aritmetik işlemlerde ortaya çıkar.
console.log("5" - 2); // 3 (string sayı gibi davranır)
console.log("5" + 2); // "52" (string birleştirme olur)
console.log("5" * "2"); // 10
Bu durumlarda beklenmeyen sonuçlarla karşılaşmamak için açık dönüşüm kullanmak önerilir.
Gerçek Hayattan Örnekler
Formdan Gelen Veri
Bir HTML formundan alınan tüm veriler string olarak gelir. Örneğin bir yaş bilgisi input alanında sayısal gibi görünse de aslında metin olarak gelir. Bu nedenle matematiksel işlem yapmadan önce dönüştürmek gerekir.
let yasInput = "30";
let yas = Number(yasInput);
if (yas >= 18) {
console.log("Reşit.");
} else {
console.log("Reşit değil.");
}
API’den Gelen Veri
Birçok API boolean yerine “true” ya da “false” gibi string değerler döndürebilir. Bu durumda kontrol ederken dikkatli olmak gerekir.
let aktiflikDurumu = "true";
if (aktiflikDurumu === "true") {
console.log("Kullanıcı aktif.");
} else {
console.log("Kullanıcı pasif.");
}
Checkbox Kontrolü
HTML formlarında checkbox’lar da genellikle true
ya da false
değil, “on” gibi değerler döndürebilir.
let onay = "on";
let kontrol = Boolean(onay); // true
En Sık Karşılaşılan Hatalar
typeof null
çıktısının “object” olmasıtypeof []
çıktısının “object” olmasıparseInt("10px")
gibi ifadelerin sadece sayısal kısmı alması- Boş stringlerin veya
undefined
değerlerin yanlışlıkla “truthy” zannedilmesi
Bu hatalardan kaçınmak için dönüşüm fonksiyonları dikkatli kullanılmalı ve mümkünse dönüşümden önce tür kontrolü yapılmalıdır.
Sonuç
JavaScript’te değişken türleriyle çalışmak başlangıçta karmaşık görünebilir. Ancak zamanla typeof
, instanceof
, Array.isArray()
gibi yapılar sayesinde veri türlerini anlamak kolaylaşır. Bunun yanında Number()
, String()
, Boolean()
gibi dönüşüm fonksiyonları, geliştiricilere büyük esneklik sağlar. Özellikle kullanıcıdan gelen veriler üzerinde işlem yaparken bu dönüşümler kritik hale gelir.
Bu konulara hakim olan bir geliştirici, sadece daha hatasız değil, aynı zamanda daha güvenli ve okunabilir kodlar yazar. Eğer JavaScript öğrenme sürecindeyseniz, değişken türü kontrolü ve dönüşümleri konusunu sağlam bir şekilde öğrenmeniz uzun vadede size büyük avantaj sağlayacaktır. Daha fazlası için “Javascript” kategorisine bakabilirsin.
-
typeof null
neden"object"
döner?Bu, JavaScript’in en eski bug’larından biridir.
typeof null
ifadesi"object"
döner çünkünull
‘ün iç temsili, 0 referansına sahip bir nesne gibi algılanır. Ancaknull
aslında özel bir ilkel (primitive) değerdir. Türünü kontrol etmek içinveri === null
gibi bir kontrol yapılmalıdır. -
Dizilerin türünü
typeof
ile kontrol edebilir miyim?Hayır.
typeof [1, 2, 3]
ifadesi"object"
sonucunu verir çünkü diziler aslında nesnedir. Dizi olup olmadığını anlamanın en doğru yoluArray.isArray()
metodudur. -
Number()
ileparseInt()
arasındaki fark nedir?Number()
tüm string ifadeyi sayıya çevirmeye çalışır. Başında ya da sonunda sayı olmayan karakter varsaNaN
döner.parseInt()
ise string’in başındaki sayıları alır, geri kalanı yok sayar. -
Boolean()
hangi değerlerifalse
yapar?Aşağıdaki değerler
false
olarak değerlendirilir (falsy):false
0
""
(boş string)null
undefined
NaN
Diğer tüm değerlertrue
(truthy) kabul edilir. -
"" + 5
neden"5"
sonucunu verirken,"5" - 2
neden3
verir?JavaScript’te
+
operatörü, eğer taraflardan biri string ise, birleştirme (concatenation) yapar.
Ancak-
,*
,/
gibi operatörler otomatik olarak string’leri sayıya dönüştürerek matematiksel işlem yapar. -
undefined
ilenull
arasındaki fark nedir?undefined
, bir değişkene değer atanmadığında JavaScript’in otomatik olarak verdiği türdür.null
, geliştirici tarafından bilerek “boş” anlamında atanır. Yaniundefined
otomatik,null
isteyerek kullanılır. -
NaN
nedir? Türü nedir?NaN
, “Not a Number” (Bir sayı değil) anlamına gelir. Sayıya dönüştürülemeyen ifadelerle yapılan işlemlerin sonucudur. İlginç bir şekildetypeof NaN
sonucu"number"
döner. -
instanceof
iletypeof
farkı nedir?typeof
ilkel veri tiplerini anlamak için kullanılır (number
,string
,boolean
,undefined
vs.).instanceof
nesne temelli yapıların hangi sınıfa ait olduğunu anlamak için kullanılır (Array
,Date
,Object
vs.). -
==
ve===
arasındaki fark nedir?==
(eşitlik operatörü) karşılaştırma yapmadan önce tür dönüşümü uygular (type coercion).===
(sıkı eşitlik) hem tür hem de değer açısından eşitliği kontrol eder. Genellikle daha güvenli olduğu için===
önerilir.
Kaynak; w3schools, patika.dev
Henüz yorum yapılmamış. İlk yorumu siz yapabilirsiniz!