2013-06-27 2 views
8

CoffeeScriptजावास्क्रिप्ट में कॉफीस्क्रिप्ट शैली अस्तित्व ऑपरेटर कैसे बनाएं?

if (typeof user !== "undefined" && user !== null) { 
    user.id; 
} 

में user?.id बदल जाता है यह एक JavaScript फ़ंक्शन exists कि कुछ इसी तरह करना होगा बनाने के लिए संभव है? अर्थात

exists(user).id 

परिणाम होगा में या तो user.id या null

यह आसान एक समारोह अन्य पैरामीटर को स्वीकार करता है, तो हो सकता है, अर्थात exists(user, 'id'), लेकिन यह उतना अच्छा नहीं होता।

+0

के लिए यह एक सामान्य प्रयोजन ही टिककर खेल ('definegetter (ओ, समारोह (संपत्ति) {...})', जो कर रहे हैं, अगर मैं correclty याद है, नहीं जावास्क्रिप्ट के विवरण के एक हिस्से। – Zeta

+0

नहीं @Zeta की आवश्यकता होगी वास्तव में, किसी ऑब्जेक्ट की किसी भी प्रकार की संपत्ति को एक्सेस करने के बाद विफल होने की बजाय 'अपरिभाषित' लौटाता है, जो पर्याप्त होना चाहिए। – millimoose

+3

निकटतम मैं सोच सकता हूं कि 'कार्य मौजूद है (ओबीजे) {if (obj) वापसी obj; वापसी {}; } ', लेकिन वह अपरिभाषित चर को संभाल नहीं पाएगा। जावास्क्रिप्ट उस तरह से वाक्यगत रूप से एक्स्टेंसिबल नहीं है। – millimoose

उत्तर

5

नहीं, आप इस तरह के एक समारोह का उत्पादन नहीं कर सकते हैं।

any_function(undeclared_variable) 

एक ReferenceError का उत्पादन करेगा अगर undeclared_variable कहीं भी घोषित नहीं किया गया था: समस्या यह है कि यह है। उदाहरण के लिए, अगर आप इस अकेले खड़े कोड चलाएँ:

function f() { } 
f(pancakes); 

आप एक ReferenceError मिलेगा क्योंकि pancakes कहीं भी घोषित नहीं किया गया था। डेमो: http://jsfiddle.net/ambiguous/wSZaL/

हालांकि, typeof operator कुछ है कि तो यह घोषित नहीं किया गया पर इस्तेमाल किया जा सकता:

console.log(typeof pancakes); 

बस कंसोल में एक undefined प्रवेश करेंगे। डेमो: जब से तुम अघोषित चर पर typeof उपयोग करने के लिए सक्षम होने के लिए की जरूरत नहीं है

function exists(obj, key) { 
    if (typeof obj !== "undefined" && obj !== null) 
     return obj[key]; 
    return null; // Maybe you'd want undefined instead 
} 

या,: http://jsfiddle.net/ambiguous/et2Nv/

आप संभव ReferenceErrors कोई आपत्ति नहीं है, तो आप पहले से ही आवश्यक समारोह अपने प्रश्न में है यहाँ, आप इसे करने के लिए नीचे को आसान बनाने में कर सकते हैं:

function exists(obj, key) { 
    if(obj != null) 
     return obj[key]; 
    return null; 
} 

नोट != करने के लिए परिवर्तन, undefined == null भले ही undefined === null नहीं है सच है।

3

बहुत पुराना सवाल लेकिन मुझे इस समाधान के बारे में सोचने लगा।

exists = (obj) => obj || {} 
exists(nullableObject).propName; 
संबंधित मुद्दे