2016-06-24 17 views
14

Kısa bir süre önce es6'ya geçtim ve tüm kodlarımın üzerinde ok işlevlerini kullanmaya başladım. Ben koduJavascript'te bir liner ok işlevinden anonim nesneyi nasıl döndürürüm?

data.map(function(d) { 
    return {id: d.id, selected: bool}; 
}); 

altına rastladı üstlenmeden iken bu kod yukarıda değişti -

data.map((d) => {id: d.id, selected: bool}); 

Ama kod yukarıdan hata başlamıştı. Burada neyin yanlış olduğunu bilmiyorum Biliyorum ki, herhangi bir kod bloğu yoksa, ok işlevi tarafından sağlanan örtülü bir geri dönüş var.

Boş nesneyi veya anonim nesneyi başlatılan bazı özelliklerle nasıl döndüreceğinizi bilmiyor musunuz?

Düzenleme: Ben yaparsam bu şekilde yanlış nedir

? Sadece merak için.

data.map((d) => ({id: d.id, selected: bool})); 

Parantez içlerinde ifadenin değeri üzerinde hiçbir etkisi yoktur, ancak ilk belirsizliği ortadan kaldırma sözdizimsel etkisi var mı :

data.map((d) => new {id: d.id, selected: bool}); 
+2

Burada, bu konu üzerinde çalışırken karşılaştığım ilginç ve ilgili bir okuma https://rainsoft.io/when-not-to-use-arrow-functions-in-javascript/ (özellikle puan 2 ve 4) – cregox

cevap

27

koyun nesne başlatıcısı etrafında parens İçerilen ifadenin belirteci. Parantez olmadan, JavaScript çözümleyicisi { belirtecinin "Burada bir işlev gövdesi başlatması" veya "Burada bir nesne başlatıcıyı başlatır" ifadesi olup olmadığına karar vermesi gerekir. Bu her zaman ilkini seçer (yani, bir kod bloğu).

parantez Tanıtımı

, bu nedenle, karışıklığı ortadan kaldırır: { içindeki parantezler sadece olabilir böylece ( lider anlamına gelebilir tek şey, "Burada bir ifade geliyor" dir "Burada bir nesne başlatıcı gelir." (Bir ifadenin ortasında bir kod bloğu bırakamazsınız, başka bir deyişle; eğer çalışırsanız, bir sözdizimi hatası alırsınız.)

+2

Düzenlenmiş kısmı da açıklar mısınız? – WitVault

+1

@WitVault 'new' kullanmak yanlış çünkü' new' yalnızca bir işlevin bir referansı olduğunda ne zaman ortaya çıkar. Bunu denerseniz, bir hata da alırsınız. – Pointy

+1

Haklısın, hatayı aldım. Ama sadece ne olup bittiğini anlamak istedim. – WitVault

0

den ({ÖRNEK çubuğu})

da kullanabilir

data.map((d) => { 
    return {id: d.id, selected: bool} 
}); 
İlgili konular