v2.1.1
Giriş yap

Javascript ES6 Spread Operatörü

Spread türkçe karşılık olarak yaymak, yayılmış demek. Bu operatörde tam anlamıyla bunu yapıyor aslında.

Spread operatörü ile iterable nesneleri tek tek öğelerine bölebiliyoruz. iterable nesneden kastım ise Array Map Set DOM NodeList vb.

Hızlıdan bir spread operatörü örneği görelim.

// meyvelerden oluşan bir dizi
const meyveler = ['Elma', 'Muz', 'Karpuz'];

// Spread operatörünü kullanarak dizi değerlerini gösterelim
console.log(...meyveler);

// Çıktı -> Elma Muz Karpuz

Yani operatörü kullanmak için ... üç noktayı nesne başına koyuyoruz. Yukarıdaki örnektede dizi değerlerini göstermek için bu operatörü kullandık.


Kullanım Alanları

Array Kopyalama

Normalde bir array'i kopyaladığınızda bunu referanslı olarak kopyalıyorsunuz. Ve referans aldığınız arrayde değişiklik olduğunda sizin kopya nesnenizde değişiyor. Yani örneğin;

let meyveler = ['elma', 'armut'];
let meyveler_copy = meyveler;

console.log(meyveler_copy); // Çıktı -> ["elma", "armut"]

meyveler.push('çilek');

console.log(meyveler_copy); // Çıktı -> ["elma", "armut", "çilek"]

Örnekte meyveler dizisini meyveler_copy adıyla kopyaladık ve console'a yazdırdık. Ancak daha sonra referans aldığımız diziye yeni bir değer eklediğimizde kopyaladığımız dizide de aynı elemanın olduğunu görüyoruz. Bunu spread operatörü ile yapsaydık ise sonuç şöyle olacaktı;

let fruits = ['elma', 'armut'];
let fruits_copy = [...fruits];

console.log(fruits_copy); // Çıktı -> ["elma", "armut"]

fruits.push('çilek');

console.log(fruits_copy); // Çıktı -> ["elma", "armut"]

Bu operatör sayesinde Shallow copy dediğimiz sığ kopyalama yani referanssız kopyalama işlemini gerçekleştiriyoruz.

Obje Kopyalama

Yukarıdaki işlemin aynısını objeler içinde yapabiliriz. Örneğin;

const user = {
    name: "Tayfun",
    surname: "Erbilen"
}

const userCopy = {...user}

console.log(userCopy)
user.age = 27;
console.log(userCopy)

Dizileri Birleştirmek

İki ve ya daha fazla diziyi birleştirmek, dizinin başına ya da sonuna yeni değer ekleyerek bir dizi oluşturmak içinde bu operatör kullanılır. Örneğin;

const maleNames = ["Tayfun", "Gökhan"]
const femaleNames = ["Aslı", "Handan"]

const names = [...maleNames, ...femaleNames]

console.log(names) // Çıktı -> ["Tayfun", "Gökhan", "Aslı", "Handan"]
console.log(['başında', ...names, 'sonunda'])

Objeleri Birleştirmek

Yukarıdaki işlemin aynısını objeler içinde yapabiliriz. Örneğin;

const user = {
    name: "Tayfun",
    surname: "Erbilen"
}

const pets = {
    pets: {
        dog: "Monti",
        cats: ["Paşa", "Göbek", "Şans"]
    }
}

const userDetail = {...user, ...pets}

console.log(userDetail)

String ifadelerde kullanımı

Bir string ifadeyi parçalara ayırmak istersekte şöyle kullanabiliriz;

let username = "tayfunerbilen"
let chars = [...username]

console.log(chars) // Çıktı -> ["t", "a", "y", "f", "u", "n", "e", "r", "b", "i", "l", "e", "n"]

Fonksiyon Parametresinde Gönderme ve Alma

Fonksiyona parametre gönderirken ya da fonksiyonda parametre alırkende bu operatörü kullanmak işimizi çok kolaylaştırıyor.

// fonksiyonda parametreleri alırken spread kullanımı
function square(...numbers){
    return numbers.map(number => number * 2)
}

console.log(square(1, 3, 5, 7)) // Çıktı -> [2, 6, 10, 14]

// fonksiyona parametre gönderirken spread kullanımı
function printUser(name, surname){
    return `${name} ${surname}`
}

let user = ["Tayfun", "Erbilen"]
console.log(printUser(...user)) // Çıktı -> "Tayfun Erbilen"

Destructuring ile Kullanımı

ES6 ile gelen yeniliklerden biriside Destructuring, ve spread operatörü ile kullanımı ise şöyle;

const person = {
    name : 'tayfunerbilen',
    age: 27,
    occupation: 'developer',
    skills: 'html,css,php,javascript,mysql'
}

const {name, age, ...others} = person

console.log(`Ad : ${name}`)
console.log(`Yaş : ${name}`)
console.log(others)
/* Object {
  occupation: "developer",
  skills: "html,css,php,javascript,mysql"
} */

NodeList'den Array'e Çevirmek

Javascript'te birden fazla etiket seçmek için querySelectorAll() kullanılmakta. Ancak bu bize bir NodeList döndürüyor, dolayısı ile map() forEach() filter() gibi high-order fonksiyonları kullanamıyoruz.

Bu yüzden NodeList'i array'e çevirmek için spread operatörünü kullanıyoruz.

<div>div</div>
<div>div</div>
<div>div</div>
<div>div</div>

<script>
const divs = document.querySelectorAll('div')
const divsNodeArray = [...divs]

divsNodeArray.forEach((div, key) => {
    div.innerText = `${div.innerText} #${key + 1}`
})
</script>
tayfunerbilen
96 gün önce yazdı - 224 kez görüntülendi.
Önceki JavaScript ile PWA'dan Girildiğini Tespit Etmek Sonraki Javascript ES6 Arrow Fonksiyon