Yok etme, yayma/dinlendirme, İsteğe bağlı zincirleme, Nullish birleştirme ve Modül sistemi.
ES6 (ECMAScript 2015) ve sonraki sürümler JavaScript'e çok sayıda modern özellik kattı. Bu özellikler kodu daha kısa, okunabilir ve güçlü hale getirir.
Dizi ve nesnelerden değerleri çıkarmak için kullanılır. API'den gelen karmaşık nesneleri parçalamak, fonksiyon parametrelerini netleştirmek için idealdir.
İkisi de ... ile yazılır ama farklı yerlerde kullanılır. Spread bir diziyi/nesneyi açar, Rest kalan elemanları toplar. Nesne kopyalama ve birleştirme için spread çok kullanışlıdır.
API'den gelen veride iç içe nesne erişimi yaparken ara değer undefined veya null ise TypeError hatası alırsınız. ?. operatörü bu durumda hata vermek yerine undefined döndürür.
|| sol taraf herhangi bir falsy değerse (0, "", false, null, undefined) sağ tarafı döndürür. ?? yalnızca null veya undefined ise sağ tarafı döndürür. 0 veya boş string geçerli değer olduğunda ?? kullanın.
// ── Destructuring ──
// Dizi
const [ilk, ikinci, ...geri_kalanlar] = [1, 2, 3, 4, 5];
console.log(ilk); // 1
console.log(geri_kalanlar); // [3, 4, 5]
// Swap (değer takası)
let a = 1, b = 2;
[a, b] = [b, a];
// Nesne
const kullanici = { ad: "Furkan", yas: 28, sehir: "Ankara" };
const { ad, yas, sehir: konum = "Bilinmiyor" } = kullanici;
console.log(ad, yas, konum); // Furkan 28 Ankara
// Fonksiyon parametresi
function profil({ ad, yas = 0, rol = "üye" } = {}) {
return `${ad} (${yas}) — ${rol}`;
}
profil({ ad: "Ali", yas: 25 });
// İç içe
const { adres: { sehir: sehirAdi } } = { adres: { sehir: "İstanbul" } };
// ── Spread Operatörü ──
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const birlesik = [...arr1, ...arr2, 7]; // [1,2,3,4,5,6,7]
// Nesne kopyalama ve birleştirme
const temel = { id: 1, ad: "Furkan" };
const guncel = { ...temel, yas: 28, sehir: "Ankara" };
const degistirilmis = { ...temel, ad: "Yeni Ad" }; // üzerine yaz
// Fonksiyon argümanı
const sayilar = [3, 1, 4, 1, 5, 9];
console.log(Math.max(...sayilar)); // 9
// ── Optional Chaining (?.) ──
const veri = {
kullanici: {
profil: { resim: "foto.jpg" }
}
};
console.log(veri?.kullanici?.profil?.resim); // "foto.jpg"
console.log(veri?.siparis?.toplam); // undefined (hata değil!)
console.log(veri?.kullanici?.getAd?.()); // undefined (metot yoksa)
// ── Nullish Coalescing (??) ──
const deger = null ?? "varsayilan"; // "varsayilan"
const sifir = 0 ?? "varsayilan"; // 0 (!! || ile farkı)
const bos = "" ?? "varsayilan"; // ""
// || ile farkı
console.log(0 || "varsayilan"); // "varsayilan" (0 falsy)
console.log(0 ?? "varsayilan"); // 0 (sadece null/undefined kontrol eder)
// ── Logical Assignment ──
let x = null;
x ??= "varsayilan"; // x null/undefined ise ata
let y = 1;
y &&= y * 2; // y truthy ise çarp
let z = 0;
z ||= 99; // z falsy ise ata
// ── Object Metodları ──
const obj = { a: 1, b: 2, c: 3 };
Object.keys(obj); // ["a", "b", "c"]
Object.values(obj); // [1, 2, 3]
Object.entries(obj); // [["a",1], ["b",2], ["c",3]]
// entries'den nesne oluştur
const carpilmis = Object.fromEntries(
Object.entries(obj).map(([k, v]) => [k, v * 2])
);
// { a: 2, b: 4, c: 6 }
Object.freeze(obj); // değiştirilemez
Object.assign({}, obj); // sığ kopyala
// ── Array Metodları ──
const urunler = [
{ ad: "PHP Kitabı", fiyat: 150, stok: 5 },
{ ad: "CSS Kursu", fiyat: 299, stok: 0 },
{ ad: "JS Rehberi", fiyat: 199, stok: 3 },
];
// find — ilk eşleşeni döner
const pahali = urunler.find(u => u.fiyat > 200);
// findIndex — ilk eşleşenin indexi
const idx = urunler.findIndex(u => u.stok === 0);
// every — hepsi mi?
const hepsiStokta = urunler.every(u => u.stok > 0); // false
// some — en az biri mi?
const biriStokta = urunler.some(u => u.stok > 0); // true
// flat — iç içe diziyi düzleştir
const iiceIci = [[1,2],[3,[4,5]]];
iiceIci.flat(); // [1,2,3,[4,5]]
iiceIci.flat(2); // [1,2,3,4,5]
// flatMap
const cumle = ["hello world", "foo bar"];
cumle.flatMap(c => c.split(" ")); // ["hello","world","foo","bar"]
// at() — sondan erişim
const son = urunler.at(-1); // son eleman
const sondan_ikinci = urunler.at(-2);
// ── Symbol ──
const ID = Symbol("id");
const YETKI = Symbol("yetki");
const nesne = { [ID]: 123, [YETKI]: "admin", ad: "Furkan" };
console.log(nesne[ID]); // 123
console.log(Object.keys(nesne)); // ["ad"] — Symbol gizli!
// ── WeakMap ve WeakSet ──
const ozel = new WeakMap(); // Garbage collection'a uygun
const el = document.querySelector('body');
ozel.set(el, { tiklama: 0 });
ozel.get(el).tiklama++;