2016-04-12 15 views
0

Ayrı dosyada a.b.c.d uygulayayım diyelim.Zincirlenmemiş nesne formunda tanımsız özellik denetimi için en iyi uygulama nedir?

Yani, a, b, c tanımlanır kontrol etmek ve bu özelliği tanımlı değilken yakalamak fıkra içine son çare olarak gerek.

Şu anda bu kodu kullanıyorum. Ama çok uzun, kirli ve bakımı zor.

try{ 
    if(!("a" in window)) { 
    throw new Error(); 
    } 
    if(!("b" in a)) { 
    throw new Error(); 
    } 
    if(!("c" in a.b)) { 
    throw new Error(); 
    } 
} catch(e){ } 

En iyi uygulama nedir?

+0

Tam olarak hangisinin olmadığını bilmek ister misiniz? – Linek

+0

@Linek Evet dersem ne olur? – Lukabot

+0

Sen http://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json/11922384#11922384 ([* Erişim/süreç (iç içe) nesneler, diziler ya da JSON *] bakmak olabilir). "En iyi uygulama" tanımlayın, "en iyi" için ölçütlerinize bağlıdır. – RobG

cevap

1

elle bu durumların her birinde bir hata atıyorlar, ama sadece bunun yerine yakalamak böylece undefined bir özelliğini erişmeye çalıştığınızda davranışı, yine bir ReferenceError atmaktır:

try{ 
    a.b.c.d 
} catch(e){ // Either a, a.b, or a.b.c was undefined } 
+0

[* hata *] 'yı yakaladığınızdan (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error), ayrıca mesajda 'Undefined' özelliği 'd' okunamıyor. ;-) – RobG

-2
if !(a && a.b && a.b.c && a.b.c.d) { 
    throw new Error(); 
} 
// else a.b.c.d exists 
+1

"a.b.c.d" var ve bir falsey değeri varsa, bu bir hata (benim aşağı oy BTW değil) atacaktır. – RobG

+0

Harika puan! Belki de cevabımı reddetmeliyim :) – Wainage

İlgili konular