
İç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
undefineddeğ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 nullneden"object"döner?Bu, JavaScript’in en eski bug’larından biridir.
typeof nullifadesi"object"döner çünkünull‘ün iç temsili, 0 referansına sahip bir nesne gibi algılanır. Ancaknullaslında özel bir ilkel (primitive) değerdir. Türünü kontrol etmek içinveri === nullgibi bir kontrol yapılmalıdır.Dizilerin türünü
typeofile 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 varsaNaNdöner.parseInt()ise string’in başındaki sayıları alır, geri kalanı yok sayar.Boolean()hangi değerlerifalseyapar?Aşağıdaki değerler
falseolarak değerlendirilir (falsy):false0""(boş string)nullundefinedNaN
Diğer tüm değerlertrue(truthy) kabul edilir."" + 5neden"5"sonucunu verirken,"5" - 2neden3verir?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.undefinedilenullarası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. Yaniundefinedotomatik,nullisteyerek kullanılır.NaNnedir? 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 NaNsonucu"number"döner.instanceofiletypeoffarkı nedir?typeofilkel veri tiplerini anlamak için kullanılır (number,string,boolean,undefinedvs.).instanceofnesne temelli yapıların hangi sınıfa ait olduğunu anlamak için kullanılır (Array,Date,Objectvs.).==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!