Object, Array ve Function'ların nasıl çalıştığını öğrenin.
Bu bölümde neler öğreneceksiniz?
Object'lerin reference mantığı
Array'lerde referans kopyalama
Shallow vs Deep copy
Spread operator ile kopyalama
1080p HDAltyazıEk kaynak
JavaScript'te Reference (Referans) Veri Tipleri
JavaScript'te veri tipleri iki ana kategoriye ayrılır: Primitive (ilkel) ve
Reference (referans) tipler. Bu bölümde reference tipleri detaylıca inceleyeceğiz.
Hatırlatma: Primitive tipler (string, number, boolean, null, undefined, symbol)
değer olarak kopyalanırken, reference tipler (object, array, function) adres olarak kopyalanır.
Object'lerde Referans Mantığı
Bir object oluşturduğunuzda, değişken aslında object'in kendisini değil,
onun bellekteki adresini (referansını) tutar.
// Object oluşturalım
let user1 = {
name: "Ahmet",
age: 25
};
// user2, user1 ile aynı object'i gösteriyor
let user2 = user1;
// user2 üzerinden değişiklik yapalım
user2.age = 30;
// user1'in yaşı da değişti!
console.log(user1.age); // 30
console.log(user2.age); // 30
// Çünkü ikisi de aynı referansı gösteriyor
console.log(user1 === user2); // true
Bu örnekte görüldüğü gibi, user2 aslında yeni bir object değil,
user1'in gösterdiği object'in referansını kopyaladı. Bu yüzden birinde yapılan
değişiklik diğerini de etkiler.
Önemli: Eğer gerçekten object veya array'in bir kopyasını oluşturmak istiyorsanız,
spread operator (...), Object.assign() veya deep copy yöntemlerini kullanmalısınız.
Shallow Copy (Yüzeysel Kopyalama)
let original = {
name: "Ali",
address: {
city: "İstanbul",
country: "Türkiye"
}
};
// Shallow copy - spread operator
let copy1 = { ...original };
// veya
let copy2 = Object.assign({}, original);
// İlk seviyede kopyalama başarılı
copy1.name = "Veli";
console.log(original.name); // "Ali" - değişmedi
// Ancak iç içe object'lerde sorun var!
copy1.address.city = "Ankara";
console.log(original.address.city); // "Ankara" - değişti!
Deep Copy (Derin Kopyalama)
// JSON yöntemi (basit object'ler için)
let original = {
name: "Ali",
address: {
city: "İstanbul",
country: "Türkiye"
}
};
let deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.address.city = "İzmir";
console.log(original.address.city); // "İstanbul" - değişmedi!
// Modern yöntem - structuredClone
let deepCopy2 = structuredClone(original);
Özet
Reference tipler (object, array) bellekte tek bir yerde saklanır
Değişkenler bu adresi (referansı) tutar
= operatörü ile atama yapmak referansı kopyalar
Gerçek kopya için spread, Object.assign() veya structuredClone kullanın
İç içe object'lerde deep copy gerekebilir
Bu Bölümün Kaynakları
Reference Types Ders Notları
PDF • 1.2 MB • 8 sayfa
Alıştırma Kodları
ZIP • 45 KB • 5 dosya
MDN Web Docs - Object
developer.mozilla.org
Notlarım
Reference tiplerde = operatörü referansı kopyalar, değeri değil!
Bu yüzden obj1 = obj2 dediğimizde ikisi de aynı objeyi gösterir.
2 dakika önce
Deep copy için structuredClone() en modern yöntem.
JSON.parse(JSON.stringify()) da iş görür ama function'ları kopyalamaz.