Obje, anahtar-değer çiftlerinin koleksiyonudur. JavaScript'in kalbidir.
Tanımlama
const user = {
name: "Furkan",
age: 28,
isActive: true,
hobbies: ["kod", "kitap"],
address: {
city: "İstanbul",
country: "TR",
},
};Property erişimi
İki yol vardır:
user.name // dot — sabit anahtar
user["name"] // bracket — dinamik anahtar
const key = "age";
user[key]; // 28Dot notation çalışmadığı durumlar: anahtar boşluk içeriyorsa, sayı ile başlıyorsa, ya da çalışma anında belirleniyorsa.
Ekleme / silme
user.email = "a@b.com"; // ekle/güncelle
delete user.age; // sil
"name" in user; // true — kontrolObject literal kısayolları
const name = "Furkan";
const age = 28;
// Eski yol
const user = { name: name, age: age };
// Modern (shorthand)
const user = { name, age };Computed property names
const key = "role";
const obj = {
[key]: "admin", // dinamik anahtar
[`${key}Level`]: 5,
};
// { role: "admin", roleLevel: 5 }Method shorthand
const calc = {
add(a, b) { return a + b; }, // shorthand
sub: function (a, b) { return a - b; }, // eski
};Object metotları
Object.keys / values / entries
const u = { name: "F", age: 28 };
Object.keys(u); // ["name", "age"]
Object.values(u); // ["F", 28]
Object.entries(u); // [["name", "F"], ["age", 28]]entries ile dolaşmak çok kullanışlı:
for (const [key, value] of Object.entries(u)) {
console.log(`${key} = ${value}`);
}Object.assign ve spread
Birleştirme:
const a = { x: 1 };
const b = { y: 2 };
const c = Object.assign({}, a, b); // {x:1, y:2}
const d = { ...a, ...b }; // {x:1, y:2} — modern, tercih buObject.freeze
İçeriği sabitler:
const config = Object.freeze({ apiUrl: "/api" });
config.apiUrl = "x"; // sessizce yok sayılır (strict mode'da hata)Immutable güncelleme
Obje değişmeli (state) ise, yenisini oluştur:
const user = { name: "F", age: 28, role: "user" };
// ❌ direkt mutasyon (React/Redux'ta yasak)
user.role = "admin";
// ✅ yenisini oluştur
const updated = { ...user, role: "admin" };İç içe güncellemede:
const updated = {
...user,
address: { ...user.address, city: "Ankara" },
};Karşılaştırma
{ a: 1 } === { a: 1 } // false — referanslar farklıİçerik karşılaştırması için JSON.stringify(a) === JSON.stringify(b) (basit
durumlarda) veya bir kütüphane (lodash isEqual) kullan.
Optional chaining + nullish
İç içe erişimde güvenli:
const city = user?.address?.city ?? "Bilinmiyor";user veya address yoksa hata atmaz, "Bilinmiyor" döner.