JavaScript: Başlangıçtan İleri Seviyeye
Bölüm 13 / 313 dk okuma

Objeler

Object literal, property erişimi, Object metotları ve immutable güncelleme.

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];          // 28

Dot 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 — kontrol

Object 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 bu

Object.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.

Bu bölümü bitirdin mi?

İlerlemen tarayıcıda saklanır, eğitim listesinde görünür.

Paylaş