Veri Tipleri bölümünde hatırlanacaÄı üzere, JavaScriptâte yedi tane farklı tip olduÄundan bahsedilmÅiti. Altı tanesi âbasitâ tipler, deÄerleri sadece tek bir Åeye eÅit olabilir. ( karakter dizisi, sayı vs.)
Buna karÅın objeler anahtar bilgileri ile deÄerlerini tutar ve daha karmaÅık veri yapıları oluÅturabilirler. JavaScriptâte bu objeler dilin neredeyse her alanına etki etmiÅ durumdadır. Bundan dolayı daha derinlere inmeden nasıl çalıÅtıklarının öÄrenilmesi gerekmekte.
Obje {...} iÅareti ile yaratılabilir. Objenin kendine has özellikleri mevcuttur. Bir özellik anahtar:deÄer ikilisinden oluÅur. key( anahtar) genelde karakter dizisi olur ve âözellik ismiâ olarak adlandırılır. DeÄer ise herhangi bir tip olabilir.
Obje bir dolap gibi düÅünülebilir. Bu dolabın içindeki her klasörün bir ismi var ve bu isme göre içinde deÄerler mevcut. Bu key(anahtar) deÄerine göre dosyayı bulmak, eklemek ve silmek daha kolay olacaktır.
BoÅ obje (âboÅ dolapâ) iki türlü oluÅturulabilir.
let kullanici = new Object();
let kullanici = {};
Genelde {...} kullanılmaktadır. Bu Åekilde tanımlamaya obje kelimesi (object literal) denir.
Kelimeler ve özellikler
DoÄrudan {...} içerisine âanahtar:deÄerâ ikilisi ile özellik eklemek mümkündür:
let kullanici = { // obje
isim: "Mahsun", // isim anahtarı, Mahsun deÄerini tutar.
yas: 30 // yaÅ anahtarı 30 deÄerini tutar.
};
Ãzellik obje anahtarı ve deÄerden oluÅur. Obje anahtarı (tanımlayıcısı) ":"'den önce, deÄeriyse ":" den sonra tanımlanmalıdır.
kullanici objesinde iki tip özellik vardır.
- İlk özellik
"isim"anahtarına sahiptir ve deÄeri"Mahsun"'dur. - İkinci özellik ise
"yaÅ"anahtarına sahiptir ve deÄeri30dur.
kullanici objesi bir dolap ve içinde âisimâ ve âyaÅâ deÄerlerinin olduÄu iki klasör olarak hayal edilebilir.
Bu klasörleri istediÄimiz zaman okuyabilir, yazabilir ve silebiliriz.
Ãzellik deÄerlerine . yazımı ile ulaÅılabilir.
// objenin özellikleri:
alert( kullanici.isim ); // Mahsun
alert( kullanici.yas ); // 30
DeÄer her tipten olabilir. Boolean deÄeri aÅaÄıdaki gibi eklenebilir :
kullanici.adminMi = true;
delete operatörü ile bir özellik silinebilir:
delete kullanici.yas;
Birkaç kelimeden oluÅan özellik ismi yazabilirsiniz. Fakat bu durumda anahtar çift tırnak içine alınmalıdır:
let kullanici = {
isim: "Mahsun",
yas: 30,
"Nemrudun Kızı": true // birkaç kelimeden oluÅtuÄunda görüldüÄü üzere tırnak içine alınması gerekmektedir.
};
Her özellikten sonra virgül konulmalıdır. Son özellikten sonra virgül ile bitirilebilir.
let kullanici = {
name: "Mahsun",
age: 30,
}
Bu vigüle âbekletmeâ virgülü denir. Böylece yeni özellik ekleme veya silme daha kolay olur. Ãünkü tüm satırlar aynıdır.
KöÅeli parantez
EÄer özellik anahtarı birkaç kelimeden oluÅuyorsa nokta ile bu özelliÄe eriÅilemez:
// yazım hatası
kullanici.Nemrudun Kızı = true
Ãünkü . aslında bir deÄiÅken ismi beklemektedir. DeÄiÅken tanımlarken boÅluk ve baÅka sınırlamalar aynen . yazımı için de geçerlidir.
Bunun yerine köÅeli parantez yazımı ile bunu çözebilirsiniz:
let kullanici = {};
// deÄer ata
kullanici["Nemrudun Kızı"] = true;
// deÄer al
alert(kullanici["Nemrudun Kızı"]); // true
// sil
delete kullanici["Nemrudun Kızı"];
Her Åey beklendiÄi gibi çalıÅıyor. Dikkat ederseniz köÅeli parantez içerisindeki kelimeler tırnak içerisinde yazılır, tek tırnak veya çift tırnak önemli deÄildir. Her ikisi de aynı görevi görür.
Bunun yanında aÅaÄıdaki gibi deÄiÅken üzerinden de gidilebilir:
let anahtar = "Nemrudun Kızı";
// kullanici["Nemrudun Kızı"] = true; //ile aynı
kullanici[anahtar] = true;
Burada anahtar çalıÅma anında veya kullanıcının gireceÄi deÄere göre atanır. Sonrasında istenen özelliÄe eriÅmek için kullanılabilir. Nokta yazımı köÅeli parantez kadar etkin deÄildir. KöÅeli parantez esneklik saÄlar.
ÃrneÄin:
let kullanici = {
isim: "Mahsun",
yas: 30
};
let anahtar = prompt("Kullanıcı hakkında ne bilmek istiyorsun?", "isim");
// deÄiÅkene göre deÄer alınır.
alert( kullanici[anahtar] ); // Mahsun (eÄer "isim" girerse )
HesaplanmıŠÃzellikler
Obje tanımında da köÅeli parantez kullanabiliriz. Buna HesaplanmıŠÃzellikler ( Computed Properties ) denir.
ÃrneÄin:
let meyve = prompt("Hangi meyveyi istersin?", "elma");
let poset = {
[meyve]: 5, // meyve deÄiÅkeninden objenin anahtarı alınıyor.
};
alert( poset.elma ); // eÄer meyve "elma" girildiyse 5 deÄeri döner.
HesaplanmıŠözelliklerin anlamı basittir: [meyve], özellik isminin meyve deÄiÅkeninden alınması gerektiÄini bildirir.
Ãyleyse eÄer kullanıcı "elma" deÄerini girerse poset {elma:5} olacaktır.
Aslında aÅaÄıdaki ile aynı Åekilde çalıÅacaktır:
let meyve = prompt("Hangi meyveyi istersin?", "elma");
let poset = {};
// meyve deÄiÅkeninden objenin anahtarı alınıyor.
poset[meyve] = 5;
â¦fakat biraz daha iyi görünür.
KöÅeli parantez içerisinde daha karmaÅık ifadeler de kullanabilirsiniz:
let meyve = 'elma';
let poset = {
[meyve + 'Yedim']: 5 // poset.elmaYedim = 5
};
KöÅeli parantez nokta yazımına göre çok daha güçlüdür. Her türlü özellik ismini ve deÄiÅkeni desteklerler. Fakat yazımı biraz gariptir.
EÄer özellik isimleri tek kelime ise çoÄunlukla nokta yazımı kullanılır. EÄer daha karmaÅık ise bu durumda köÅeli parantez kullanılır.
DeÄiÅken ismi for,let,return gibi dil için ayrılmıŠkelimelerden oluÅamaz.
Fakat obje özellikleri için böyle bir sınırlama yoktur. DeÄiÅken her türlü adlandırılabilir.
let obj = {
for: 1,
let: 2,
return: 3
}
alert( obj.for + obj.let + obj.return ); // 6
Temelde tüm isimlere izin verilir, fakat bir tane özel isim vardır "__proto__" bu özel bir davranıŠsergiler. ÃrneÄin obje olmayan deÄeri atayamazsınız:
let obj = {};
obj.__proto__ = 5;
alert(obj.__proto__); // [object Object], beklendiÄi gibi çalıÅmadı.
Kodda görüldüÄü üzere, 5, ilkel bir tip olduÄundan dolayı atanamadı ve görmezden gelindi.
Bundan dolayı eÄer kullanıcıya bir anahtar tanımlattırılırsa bu aslında hatalara ve güvenlik açıklarına neden olabilir.
Böyle bir durumda kullanıcı âprotoâ seçerse tüm mantık yukarıdaki gibi çalıÅmaz hale gelir.
__proto__'yu normal özellik olarak tanıtma yöntemi de bulunmaktadır, bunu ilerleyen zamanlarda iÅlenecektir.
Map adında farklı bir veri yapısı daha vardır ve her türlü anahtarı kabul eder. Map, Set, WeakMap ve WeakSet bölümünden incelenebilir.
Ãzellik deÄeri kısaltması
Kod yazarken genelde var olan deÄiÅkenleri özelliklere isim olarak atarız.
ÃrneÄin:
function kullaniciOlustur(isim, yas) {
return {
isim: isim,
yas: yas
// ...diÄer özellikler
};
}
let kullanici = kullaniciOlustur("Mazlum", 30);
alert(kullanici.isim); // Mazlum
Yukarıdaki örnekte özellikler deÄiÅkenler ile aynı isme sahipler. Bu çeÅit kullanım çok yaygındır, hatta bundan dolayı kısaltma bile yapılmıÅtır.
isim:isim yazmak yerine sadece isim yazılabilir:
function kullaniciOlustur(isim, yas) {
return {
isim, // isim: isim ile aynı
yas // yas: yas ile aynı
// ...
};
}
Aynı obje içerisinde kısaltma ve normal versiyonu kullanılabilir:
let kullanici = {
isim, // isim:isim ile aynı.
yas: 30
};
Varlık kontrolü
Bir objedeki her özellik eriÅilebilirdir. EÄer o özellik olmasa bile hata vemez!!! Olmayan bir özelliÄe ulaÅmaya çalıÅtıÄınızda undefined deÄeri döner. Bu da kolayca o özelliÄin olup olmadıÄını kontrol etmenizi saÄlar.
let kullanici = {};
alert( kullanici.olmayanOzellik === undefined ); // true "böyle bir özellik yok" demektir.
Ayrıca bunu kontrol için "in" operatörü de kullanılabilir.
Yazımı:
"anahtar" in obje
ÃrneÄin:
let kullanici = { isim: "Mazlum", yas: 30 };
alert( "yas" in kullanici ); // true, kullanici.yas özelliÄi mevcut.
alert( "blabla" in kullanici ); // false, kullanici.blabla namevcut.
Yazıma dikkat ederseniz in in sol tarafında özellik ismi tırnak içinde yazılır.
EÄer tırnaÄı unutursanız bu durumda deÄiÅkenin deÄerini obje içinde arar. Halbuki bizim amacımız deÄiÅkenin isminin obje içinde aramaktır.
ÃrneÄin:
let kullanici = { yas: 30 };
let anahtar = "yas";
alert( anahtar in kullanici ); // true, deÄiÅkenden deÄerini alır ve kontrol eder.
Genelde sıkı karÅılaÅtırma "=== undefined" doÄru çalıÅır. Fakat burada özel bir durum mevcuttur ve sıkı karÅılaÅtırma da baÅarısız olur. Bu durumda bile "in" doÄru çalıÅır.
Bu olay objenin özelliÄinin var olduÄu fakat undefined döndürdüÄü durumlarda meydana gelir.
let obj = {
test: undefined
};
alert( obj.test ); // undefined - yani böyle bir özellik yok mu?
alert( "test" in obj ); // true, özellik mevcut!
Yukarıdaki örnekte obj.test teknik olarak mevcut. Bundan dolayı in operatörü doÄru bir Åekilde çalıÅır.
Bu türde olaylar çok nadir yaÅanır, çünkü bir özelliÄe neredeyse kimse undefined atamaz. Genelde bilinmeyen için null veya boÅ deÄer kullanılır. Bundan dolayı in operatörü kodda yabancı görünür.
âforâ¦inâ döngüsü
Objenin içindeki anahtarlar içini adım adım gezen for..in döngüsü bulunmaktadır. Bu for(;;) döngüsünden tamamen farklıdır.
Yazım:
for(anahtar in object) {
// her anahtar için döngü gövdesini çalıÅtırır.
}
ÃrneÄin, kullanici objesinin tüm özelliklerinin çıktısını alalım:
let kullanici = {
isim: "Mazlum",
yas: 30,
mazlumuGetirin: true
};
for(let anahtar in kullanici) {
// anahtarlar
alert( anahtar ); // isim, yas, mazlumuGetirin
// anahtarlara göre deÄerler
alert( kullanici[anahtar] ); // Mazlum, 30, true
}
Dikkat ederseniz, âforâ yapısına göre döngü içerisinde let anahtar tanımı yapılabilir.
Elbette anahtar yerine istediÄiniz herhangi bir deÄiÅken ismini koyabilirsiniz. ÃrneÄin key veya property
Obje sıralaması
Objeler sıralı mıdır? DiÄer bir deyiÅle; eÄer döngü içerisinde obje yazdırılırsa bu objeye yerleÅtirme sırasına göre mi yazılır?
Kısa cevap: âözel bir Åekilde sıralanırâ. EÄer tam sayı ise deÄerlerine göre, tam sayı deÄil ise türlü objeye eklenme sırasına göre sıralanır.
ÃrneÄin telefon kodları:
let kodlar = {
"49": "Almanya",
"41": "İsveç",
"44": "İngiltere",
// ..,
"1": "Amerika BirleÅik Devletleri"
};
for(let kod in kodlar) {
alert(kod); // 1, 41, 44, 49
}
Bu obje belki açılan kutu içerisinde kullanılacaktı, Alman kullanıcılar düÅünülerek yapılmıŠolabilir. Onun için Almanya birinci sıraya konulmuÅ fakat gördüÄünüz üzere anahtar 49 olduÄundan ilk deÄil de sonuncu sırada.
Kodu çalıÅtırdıÄınızda:
- Amerika BirleÅik Devletleri 1. sırada
- Sonra İsveç vs.
Telefon kodları tam sayı olduÄundan dolayı bu sıraya göre dizilmiÅlerdir.
Burada âtam sayıâ aslında sayı tipinde deÄil de karakter tipinde sayı olmakta. Sıralama yapılacaÄı sırada sayısal olarak çevriliyor ve buna göre sıralanıyor.
â¦DiÄer yandan, eÄer anahtarlar tam sayı deÄilse bu durumda objeye eklenme sırasına göre çıktı alınır:
let kullanici = {
isim: "İhsan",
soyisim: "Mümtaz"
};
kullanici.yas = 25; // yeni bir özellik ekledik
// tam sayı olaman anahtarlar objeye eklenme sırasına göre gelir.
for (let ozellik in kullanici) {
alert( ozellik ); // isim, soyisim, yas
}
Peki telefon kodları (tam sayı deÄerleri) nasıl eklenme sırasına göre kullanılabilir? Bunun için her koddan önce "+" iÅaretini kullanmak yeterli olacaktır.
Åu Åekilde:
let kodlar = {
"+49": "Almanya",
"+41": "İsveç",
"+44": "İngiltere",
// ..,
"+1": "Amerika BirleÅik Devletleri"
};
for(let kod in kodlar) {
alert( +kod ); // 49, 41, 44, 1
}
Olması gerektiÄi gibi çalıÅır.
Referans ile kopyalama
Objeler ile ilkel tipler (karakter dizisi, sayı, boolean vs.) arasındaki temel fark objelerin saklanması ve kopyalanması âreferansâ ile olur.
Fakat ilkel tipler tamamen kopyalanır.
ÃrneÄin:
let mesaj = "Merhaba!";
let karsilama = mesaj;
Sonuç olarak birbirinden baÄımsız iki deÄiÅken de "Merhaba!" deÄerini tutar.
Objeler bu Åekilde çalıÅmaz:
Obje deÄiÅkeni objenin kendisini deÄil hafızadaki adresini tutar. DiÄer bir deyiÅle referansını tutar.
Bir objenin resmi aÅaÄıdaki gibidir:
let kullanici = {
isim: "Mümtaz"
};
Obje hafızada herhangi bir yerde saklandı ve kullanici deÄiÅkeni buna âreferansâ oldu.
Obje deÄiÅkeni kopyalandıÄında aslında objenin referansı kopyalanır, hafızadaki obje kopyalanmaz.
Yine objeyi bir dolap olarak düÅünürseniz deÄiÅken bu dolabın anahtarıdır. KopyaladıÄınız zaman dolabı deÄil de anahtarı kopyalamıŠolursunuz.
ÃrneÄin:
let kullanici = { isim: "Mümtaz" };
let yonetici = kullanici; // referansı kopyalar.
Artık iki tane deÄiÅken var ve ikisi de aynı objeye referans oldu:
Bu iki deÄiÅkenden birini kullanarak objenin içeriÄi deÄiÅtirilebilir:
let kullanici = { isim: 'Mümtaz' };
let yonetici = kullanici;
yonetici.isim = 'İhsan'; // yonetici referansı kullanılarak deÄiÅtirildi.
alert(kullanici.isim); // 'İhsan', deÄiÅikliÄi kullanici referansında da etkili oldu. `Mümtaz` deÄiÅerek `İhsan` oldu.
Bu örnekten de anlaÅılacaÄı üzere sadece bir tane obje var. Bir dolabın iki anahtarı olması gibi. Bu anahtarlardan biri yonetici diÄeri kullanici dır. yonetıcı ile dolabı açıp bir Åey deÄiÅtirip daha sonra kullanici anahtarı ile açtıÄınızda dolabın içindeki deÄiÅikliÄi görebilirsiniz.
Referansların karÅılaÅtırılması
EÅitlik == ve sıkı eÅitlik === operatörleri aynı Åekilde çalıÅmaktadır.
İki obje anca aynı objeler ise eÅittir.
ÃrneÄin iki deÄiÅken aynı objeyi referans alırsa bu durumda eÅit olurlar:
let a = {};
let b = a; // referansı kopyala
alert( a == b ); // true, iki deÄiÅken de aynı objeyi referans almaktadır.
alert( a === b ); // true
İki tane farklı objenin nasıl davrandıÄına bakılırsa:
let a = {};
let b = {}; // iki tane baÄımsız obje
alert( a == b ); // false
Dikkat ederseniz ikisi de boŠolsa bile birbirinden farklı objelerdir.
obj1 > obj2 gibi karÅılaÅtırmalar veya ilkel tipler ile karÅılaÅtırmalar obj == 5 mümkündür. Fakat objeler bu durumda ilkel tiplere dönüÅür, nasıl çevirildiÄini az sonra göreceksiniz. Fakat söylemek gerekir ki böyle karÅılaÅtırmalar nadiren kullanılır ve kullandıÄında genelde kodlama hatasına neden olur.
Sabit Objeler
Sabit (const) olarak tanımlanan objeler deÄiÅtirilebilir .
ÃrneÄin:
const kullanici = {
isim: "Mümtaz"
};
kullanici.yas = 25; // (*)
alert(kullanici.yas); // 25
(*) satırında hata alınacakmıŠgibi dursa da hata alınmaz ve bir sorun olmadan çalıÅır. Bunun nedeni constâun referansının deÄiÅmediÄinde sorun yaratmamasıdır. Daha önce de kullanici aynı objeye referans gösteriyordu, daha sonra da. içinde ne olduÄu constâu ilgilendirmez. Tekrar atama yapmadıÄınız sürece bir sorun teÅkil etmez.
ÃrneÄin const aÅaÄıdaki gibi bir kullanımda, yani kullanici deÄiÅkenine baÅka bir obje referans etmeye çalıÅtıÄımızda hata verir:
const kullanici = {
isim: "Mümtaz"
};
// Hata (kullanici'ya tekrar atama yapılamaz)
kullanici = {
isim : "İhsan"
};
⦠Peki ya objenin özellikleri nasıl sabit yapılabilir? Yani kullanici.yas = 25 yazıldıÄında hata vermesi nasıl saÄlanır? Bunu
Ãzellik bayrakları ve tanımlayıcılar bölümüne geldiÄinizde göreceksiniz.
Klonlama, birleÅtirme, Object.assign
Obje kopyalanınca sadece yeni bir referans yaratıldıÄını söylemiÅtik. Peki ya objeyi kopyalamak istiyorsanız? Yani aynı dolaptan bir tane daha yapmak istiyorsanız ne yapmalısınız?
Bu elbette mümkün, bunun için JavaScript metodları bulunmaktadır. Fakat çok az ihtiyaç duyulur. Sadece referansı kopyalamak çoÄu zaman yeterli olur.
Fakat bunu gerçekten istiyorsanız, yeni bir obje yaratmak ve kopyalanacak objenin yapısını adım adım kopyalamak zorundasınız.
ÃrneÄin:
let kullanici = {
isim: "Mümtaz",
yas: 30
};
let klon = {}; // yeni obje
// tüm özelliklerin bunun içine kopyalanması gerekmekte.
for (let anahtar in kullanici) {
klon[anahtar] = kullanici[anahtar];
}
// Åu anda klonu tamamen baÄımsız durumda
klon.isim = "İhsan"; // İçindeki veri deÄiÅtirildi.
alert( klon.isim ); // orninal objede bu hala Mümtaz olarak durmakta.
Bunun yanında Object.assign metodu da kullanılabilir.
Yazımı:
Object.assign(hedef[, kaynak1, kaynak2, kaynak3...])
hedefvekaynak1,....,kaynak2,...., kaynakNistenildiÄi kadar olabilir.kaynak1,...,kaynakNe kadar olan tüm objelerin özelliklerinihedefe kopyalar. DiÄer bir deyiÅle, 2. argümandan itibaren tüm deÄerler birinci argümana kopyalanır, sonrahedefdöndürülür.
ÃrneÄin, birkaç tane objeyi bir objeye indirgemek için bu metod kullanılabilir.
let kullanici = { isim: "Mümtaz" };
let izin1 = { okuma: true };
let izin2 = { duzenleme: true };
// bu özellikleri kullanıcıya kopyalamak için
Object.assign(kullanici, izin1, izin2 );
// kullanıcının Åimdiki özellikleri, kullanici = { name: "Mümtaz", okuma: true, duzenleme: true }
EÄer obje(kullanici) aynı isimde özelliÄe sahipse bu özelliklerin üstüne yazılır.
let kullanici = { isim: "Mümtaz" };
// ismin üstüne yazılır, ve yonetici eklenir.
Object.assign(kullanici, { isim: "Pete", yonetici: true });
// Åu anda: kullanici = { isim: "Pete", yonetici: true }
Object.assignile basit bir objeyi kolayca klonlamak da mümkündür:
let kullanici = {
isim: "Mümtaz",
yas: 30
};
let klon = Object.assign({}, kullanici);
kullanici objesinin tüm özelliklerini boŠbir objeye kopyalar ve bu objeyi döndürür. Aslında daha önce yapılan döngünün aynısı, fakat daha kısa.
Åimdiye kadar kullanici objesinin tüm özelliklerinin ilkel olduÄunu varsayıldı. Fakat özellikler içlerinde baÅka obje barındırabilirler.
ÃrneÄin:
let kullanici = {
isim: "Mümtaz",
beden: {
boy: 182,
en: 50
}
};
alert( kullanici.beden.boy ); // 182
Artık eskisi gibi klon.beden = kullanici.beden demek yeterli olmayacaktır. Ãünkü kullanici.beden artık bir objedir, objelerin referansları kopyalanır. Ãyleyse klon ve kullanici aynı beden objesini kullanırlar.
Åu Åekilde:
let kullanici = {
isim: "Mümtaz",
beden: {
boy: 182,
en: 50
}
};
let klon = Object.assign({}, kullanici);
alert( kullanici.beden === klon.beden ); // true, doÄru aynı obje
// diyelim ki kullanicida deÄiÅiklik yaptınız
kullanici.boyut.en++; // bir özelliÄi bir yerde deÄiÅtirelim
alert(klon.boyut.en); // 51, gördüÄünüz üzere birinde yaptıÄınız deÄiÅiklik diÄerini de etkiledi.
Bunu düzeltmek için klonlarken eÄer obje ise içteki objenin yapısının da kopyalanması gerekmektedir. Buna derinlemesine klonlama denir.
Bu derin klonlama için kullanılan Structured cloning algorithm adında bir algoritma bulunmaktadır. Tekeri tekrar bulmaya gerek olmadıÄından , uygulaması olan lodash kütüphanesinde bulunan [Structured cloning algorithm]_.cloneDeep(obj) metodu kullanılabilir.
Ãzet
Objeler iliÅkisel dizilerdir. Bunun haricinde bir kaç tane de kendine has özellikleri vardır.
Ãzellikleri anahtar-deÄer Åeklinde tutarlar:
- Anahtarlar karakter veya sembol olabilir, genelde karakter kullanılır.
- DeÄerler ise herhangi bir veri tipinde olabilir.
ÃzelliÄe eriÅebilmek için :
- Nokta yazımı:
obj.ozellik - KöÅeli parantez yazımı:
obj["özellik"]. KöÅeli parantez ayrıca deÄiÅkenden anahtar deÄerini de alabilir. Ãrn:obj[varWithKey]
Ek operatörler:
- ÃzelliÄi silmek için:
delete obj.ozellik - VarlıÄını kontrol etmek için
"anahtar" in obj - Döngüde kullanmak için
for(let anahtar in obj)kullanılır.
Objeler deÄer deÄil de referans tutarlar, yani verilerin hafızadaki adresini. Bundan dolayı Obje deÄiÅkenini kopyalamak, veya bir parametreye göndermek demek aslında onun referansını kopyalamak veya referansını bir parametreye göndermek demektir. Tüm olaylar aslında aynı veri üzerinde olur. Bunlar özelliklerin eklenmesi veya silinmesi olabilir.
EÄer objenin âgerçek kopyasıâ , veya diÄer bir deyiÅle klonu yapılmak istenirse Object.assign veya _.cloneDeep(obj) kullanılabilir.
Bu bölümde âbasit objeâ veya Obje konusunu iÅlendi.
JavaScriptâte birçok çeÅit obje bulunmaktadır:
Dizisıralı olarak verileri tutar.,DateTarih ve saat bilgilerini tutar.,ErrorHata hakkındaki bilgileri tutarâ¦- â¦ve daha bir çoÄu.
Bunların kendilerine has özellikler ileride iÅlenecektir. Bazen okursunuz âDizi tipindeâ veya âTarih tipindeâ diye, halbuki array veya Date diye bir tip yoktur. Bunlar aslında bir objeden türemiÅtir.
JavaScript dilinde objeler çok güçlüdür. Åu ana kadar anlatılanlar sadece baÅlangıç seviyesindedir. Objelere daha yakından bakılacak ve ilerleyen bölümlerde daha fazla örnek verilecektir.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)