# Nesnelerde Üç Nokta (Spread) Operatörü

**`Object.assign()`**'dan daha kullanışlı bir sözdizimidir.

**`...`** operatörü ile nesnenin tüm özelliklerinden yayılacak şekilde bağımsız bir kopya (klon) oluşturulur. Örnek.

{% code lineNumbers="true" %}

```javascript
let isci = {
    tcNo:12345678900,
    isim:'Güneş Gün',
};
let metrik = {
    kidem:15,
    maas:12000,
};
// isci nesnesine metrik nesnesinin özelliklerini ekledik.
isci = {...metrik};
alert(isci.kidem); //'15' çıktısı verir.

//veya yeni bir nesnede birleştirebiliriz.
let yeniIsci = {...isci,...metrik};
// yayılım yapılan nesnenin değerinin değişmesinden etkilenmez.
isci.kidem = 25;
alert(yeniIsci.kidem); //'15' çıktısı verir.
```

{% endcode %}

Nesnelerde aynı özellikler var ise son sıradaki değer ilkinin üzerine yazılır. Örnek.

{% code lineNumbers="true" %}

```javascript
let isci = {
    tcNo:12345678900,
    isim:'Güneş Gün',
};
let metrik = {
    tcNo: 0,
    kidem:15,
    maas:12000,
};

isci = {...metrik}; // metrik'teki tcNo öncekinin üzerine yazılır.
alert(isci.tcNo); //0 çıktısı verir.
```

{% endcode %}

Üzerine yazmayı siz sonradan elle de yapabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let isci = {
    tcNo:12345678900,
    isim:'Güneş Gün',
    kidem:15,
    maas:12000,
};

yeniIsci = {
    ...isci,
    tcNo:0,
    maas:9000,
};
alert(yeniIsci.tcNo); //0 çıktısı verir.
alert(yeniIsci.maas); //9000 çıktısı verir.
//diğer özellikleri aynı kalır
```

{% endcode %}

Eğer değerlerde nesne kullanılmışsa **`Object.assign()`** gibi onların bir klonunu oluşturamaz.

**`...`** operatörü nesnelerde (**`object`**, **`array`** vb.) hepsinde kullanılabilir.

Yukarıda **`...`** operatörünün yayılma özelliğini kullandık.

Fakat tek işlevi yayılma (spread) değildir. Dilimlemeler ve birleştirmeler de yapılabilir. n sayıda elemanı (özelliği) olan bir nesneyi dilimleyebilir ve kalanı (rest) ile birlikte işleme alabilir.

Bu kullanımına '**Rest (Geri Kalan) Parameter'** denir. Bunu ileri fonksiyonlarda göreceğiz. Basit bir örnek.

{% code lineNumbers="true" %}

```javascript
let matematik = {
    topla (...sayilar) { //n (belirsiz) sayıda argüman aldık
        let toplam = 0;
        for (let sayi of sayilar) { // for .. of döngüsünü array'lerde gördük.
            toplam += sayi;
        }
        return toplam;
    }
};
alert( matematik.topla(1,2,3,4,5,6,7,8,9,10) );
```

{% endcode %}
