if (someObject.member && someObject.member.member &&
someObject.member.member.member && someObject.member.member.member.value) ...
oder ähnlich:
var val = foo.bar && foo.bar.jim && foo.bar.jim.jam && foo.bar.jim.jam.value;
Dies wird nicht 'Arbeit', wenn ein bestimmter Wert null
, sein geschieht false
, 0
, oder ""
(eine leere Zeichenfolge), aber mit der möglichen Ausnahme des endgültigen Werts scheint dies nicht der Fall zu sein.
Beachten Sie auch, dass typeof ____ !== "undefined"
nicht der richtige Test ist, um festzustellen, ob ein Objekt eine Eigenschaft besitzt. Stattdessen sollten Sie ___ in object
, z. if ("member" in someObject)
. Dies liegt daran, dass Sie eine Eigenschaft auf einen expliziten Wert von undefined
festlegen können, der sich von dem Entfernen mit delete someObject.member
unterscheidet.
Sieht gut aus. Ich mag den Looping-Ansatz, aber wie hilft der __typeof obj === "object" __ genau? Ist es nicht wahr, dass typeof auch ein Objekt für null und ein Array zurückgeben kann? – JustcallmeDrago
@JustcallmeDrago: True ... wäre für das Array nicht so wichtig, aber es würde für "null" fehlschlagen. Es ist also vielleicht besser, einen Scheck für null hinzuzufügen. Ich habe den Test hinzugefügt, weil "Wert" in 'einen Fehler auslösen würde. Test 'Null' hinzugefügt. –
@Felix: Ich verstehe. Ich mag die Saite als Argument, aber auch die Einfachheit von Patricks Antwort. Ist seine so sicher wie deine? Ist es so schnell? – JustcallmeDrago