1. "undefined" Değerine Düşmek - Değişkenler Tanımlanmadan Kullanıldığında
# Çözüm Yolu:
Değişkenleri kullanmadan önce her zaman tanımlayın. Ayrıca, tanımlı olup olmadığını kontrol etmek için typeof operatörünü kullanabilirsiniz.
let user;
if (typeof user !== "undefined") {
console.log(user);
} else {
console.log("Değişken tanımlanmadı!");
}
Bu örnekle, değişkenin tanımlanıp tanımlanmadığını kolayca kontrol edebilirsiniz.
2. Null ve Undefined Karışıklığı
# Çözüm Yolu:
Bu iki terimi doğru bir şekilde ayırt etmek önemlidir. null, bir değeri bilinçli olarak "yok" olarak ayarladığınızda kullanılırken, undefined genellikle bir değişkenin hiç değeri olmadığında kendiliğinden oluşur.
let a = null;
let b;
console.log(a === null); // true
console.log(b === undefined); // true
Bununla birlikte, `null` ile `undefined` karşılaştırıldığında ikisinin birbirine eşit olmadığını unutmayın. Bu küçük farkları bilmek, hatalardan kaçınmanıza yardımcı olur.
3. Asenkron İşlemler ve Callback Hell
# Çözüm Yolu:
Callback hell'den kaçınmak için Promise ve async/await yapılarını kullanabilirsiniz. Bu yöntemler kodu daha okunabilir ve yönetilebilir kılar.
async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
console.log(data);
} catch (error) {
console.error("Veri çekme hatası: ", error);
}
}
fetchData();
Bu şekilde asenkron işlemleri daha basit ve temiz bir şekilde yönetebilirsiniz.
4. Yanlış "this" Bağlamı
# Çözüm Yolu:
Arrow fonksiyonları kullanarak "this" bağlamını doğru bir şekilde sabitleyebilirsiniz. Ayrıca, `bind()` fonksiyonunu da kullanarak "this" bağlamını manuel olarak ayarlayabilirsiniz.
class Person {
constructor(name) {
this.name = name;
}
greet() {
setTimeout(() => {
console.log(`Merhaba, benim adım ${this.name}`);
}, 1000);
}
}
let person = new Person("Ahmet");
person.greet();
Bu örnekte, arrow fonksiyonu kullanarak "this" bağlamını sabitlemiş olduk.
5. Yavaş Yüklenen Sayfalar ve Performans Sorunları
# Çözüm Yolu:
Kodu optimize etmek için Lazy Loading ve Code Splitting tekniklerini kullanabilirsiniz. Ayrıca, gereksiz kodlardan kaçınarak, sadece gerekli JavaScript dosyalarını yüklemek sayfa hızını artıracaktır.
// Lazy Loading için örnek
const loadImage = () => {
const img = new Image();
img.src = 'image.jpg';
document.body.appendChild(img);
};
window.addEventListener('scroll', () => {
if (window.scrollY + window.innerHeight >= document.documentElement.scrollHeight) {
loadImage();
}
});
Bu basit teknik, kullanıcı sayfayı kaydırdıkça görsellerin yüklenmesini sağlar ve sayfa yükleme hızını artırır.
Sonuç: Hataları Fırsata Çevirin!
JavaScript hatalarını çözmek bazen karmaşık görünebilir, ancak adım adım ilerleyerek bu engelleri aşmak mümkündür. Unutmayın, her hata size yeni bir şey öğretir!