2017-10-26 18 views
6

Reaksiyon Uygulamamı geliştirirken, bir bileşene koşullu bir pervane göndermem gerekiyordu, bu yüzden bunu yapmak için bir tuhaf bir yer buldum, ancak bana gerçekten çok tuhaf geliyor ve nasıl olduğunu anlayamadım ve Neden işe yaradı?Javascript ES6 yayılma işleci tanımsız olarak

I tipi ise: tanımlanmamış bir nesne içinde olduğu zaman, boş bir nesne döndü, ancak yayılmış operatör tanımlı bir hata aktif

console.log(...undefined) // Error 
console.log([...undefined]) // Error 
console.log({...undefined}) // Work 

, yükseltilir.

Bu davranışla ilgili oldukça şaşırdım, gerçekten böyle olması gerekiyordu, buna güvenebilir miyim ve bu iyi bir uygulama mı?

+0

Bir yineleyiciye dayanan herhangi bir şeyin "null" veya "undefined" ile fırlayacağını düşünüyorum çünkü bu değerlerde gerekli yöntemleri uygulamaya koymanın bir yolu yok. Nesnenin neden sözdizimi yaydığını bilmiyorum. – llama

+0

Bunu düşünmeye başladığınızda, Object literal yayılma sözdiziminin başarısız olduğu anlamına gelir, çünkü yayılan şey genellikle başka bir düz nesnedir ve varsayılan olarak yineleyiciler değildir, bu yüzden neredeyse bir istisna yapmak zorundadırlar O vaka. – llama

+0

'{... undefined}' Bu Babel ile bile derlenmeyecek, bu yüzden kullanacağım bir şey değil. – Keith

cevap

3

Bu davranış yayılan opsiyonel gibi bir şey yapmak için kullanışlıdır:

function foo(options) { 
    const bar = { 
    baz: 1, 
    ...(options && options.bar) //options and bar can be undefined 
    } 
} 

Ve stage-1 içinde olan, daha da iyi optional chaining ile döndük:

function foo(options) { 
    const bar = { 
    baz: 1, 
    ...options?.bar //options and bar can be undefined 
    } 
} 

bir düşünce: onun çok kötü bir dizi de yaymak için de çalışmaz