if (someObject.member && someObject.member.member &&
someObject.member.member.member && someObject.member.member.member.value) ...
o simile:
var val = foo.bar && foo.bar.jim && foo.bar.jim.jam && foo.bar.jim.jam.value;
Questo non 'lavoro' se del caso particolare valore sembra essere null
, false
, 0
o ""
(una stringa vuota), ma con la possibile eccezione del valore finale, sembra improbabile che sia così.
Inoltre, notare che typeof ____ !== "undefined"
non è il test corretto per verificare se un oggetto ha una proprietà. Invece dovresti usare ___ in object
, ad es. if ("member" in someObject)
. Questo perché è possibile impostare una proprietà su un valore esplicito di undefined
, che è diverso dalla sua rimozione con delete someObject.member
.
Sembra buono. Mi piace l'approccio ciclico, ma come fa esattamente il __typeof obj === "object" __ help? Non è vero che typeof può restituire l'oggetto anche per null e array? – JustcallmeDrago
@JustcallmeDrago: True ... non ha importanza per l'array, ma fallisce per 'null'. Quindi è forse meglio aggiungere anche un assegno per null. Ho aggiunto il test perché "valore" in "genererebbe un errore. Aggiunto test 'null'. –
@Felix: vedo. Mi piace molto la stringa come argomento, ma anche la semplicità della risposta di Patrick. Il suo è al sicuro come il tuo? È veloce? – JustcallmeDrago