if (someObject.member && someObject.member.member &&
someObject.member.member.member && someObject.member.member.member.value) ...
या इसी तरह:
var val = foo.bar && foo.bar.jim && foo.bar.jim.jam && foo.bar.jim.jam.value;
यह नहीं होगा 'काम' यदि कोई विशेष मूल्य null
, false
होता है, 0
, या ""
(एक खाली स्ट्रिंग), लेकिन अंतिम मूल्य के संभावित अपवाद के साथ, यह मामला होने की संभावना नहीं है।
यह भी ध्यान दें कि typeof ____ !== "undefined"
यह देखने के लिए सही परीक्षण नहीं है कि किसी ऑब्जेक्ट की संपत्ति है या नहीं। इसके बजाय आपको ___ in object
का उपयोग करना चाहिए, उदा। if ("member" in someObject)
। ऐसा इसलिए है क्योंकि आप undefined
के स्पष्ट मान पर एक प्रॉपर्टी सेट कर सकते हैं, जो delete someObject.member
के साथ इसे हटाने से अलग है।
अच्छा लग रहा है। मुझे लूपिंग दृष्टिकोण पसंद है, लेकिन __typeof obj === "ऑब्जेक्ट" __ वास्तव में कैसे मदद करता है? क्या यह सच नहीं है कि टाइपफ ऑब्जेक्ट को शून्य और सरणी के लिए भी वापस कर सकता है? – JustcallmeDrago
@ जस्टकल्मेड्रागो: ट्रू ... हालांकि सरणी के लिए इतना मायने रखता नहीं है, लेकिन यह 'शून्य' के लिए असफल होगा। तो यह भी शून्य के लिए एक चेक जोड़ने के लिए बेहतर हो सकता है। मैंने परीक्षण जोड़ा क्योंकि 'में' मान 'एक त्रुटि फेंक देगा। जोड़ा गया 'शून्य' परीक्षण। –
@ फ़ेलिक्स: मैं देखता हूं। मुझे वास्तव में एक तर्क के रूप में स्ट्रिंग पसंद है, लेकिन पैट्रिक के जवाब की सादगी भी है। क्या वह तुम्हारा जितना सुरक्षित है? क्या यह तेज़ है? – JustcallmeDrago