कॉफ़ीस्क्रिप्ट अनिर्धारित


89

एक चर कभी नहीं बनाया गया था, यह जाँच करने के लिए जावास्क्रिप्ट में, हम बस करते हैं

if (typeof MyVariable !== "undefined"){ ... }

मुझे आश्चर्य था कि मैं इसे कॉफ़ीस्क्रिप्ट में कैसे करता हूं? ... मैं कुछ इस तरह की कोशिश करता हूं

if (MyVariable?false){ ... }

लेकिन यह जाँच करें कि MyVariableक्या कोई फ़ंक्शन है यदि ऐसा है तो MyVariable (झूठा) कहेंगे यदि नहीं तो शून्य (0) या उसके बाद कुछ कहेंगे।



कोशिश करो if MyVariable isnt undefinedजो पैदा करता है if (MyVariable !== void 0)
यामी ओडमेल

जवाबों:


163

अंत में मुझे यह करने का आसान तरीका मिल गया:

if (MyVariable?){ ... }

वह उत्पन्न करेगा:

if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }

अद्यतन 04/07/2014 डेमो लिंक

यहां छवि विवरण दर्ज करें


58
वास्तव में यह केवल उत्पन्न हुआitem != null
पेन्सिलचेक

13
@ पेन्सिलचेक - ऐसा इसलिए है क्योंकि संकलक ने निर्धारित किया है कि आइटम आपके कोड में परिभाषित किया गया था। (यह भी, महान नाम - हालांकि यह अब मेरे लिए टैबलेट की जांच है :) यह उत्तर भी शून्य मान उठाता है जो अपरिभाषित से बहुत अलग हैं। यह एक अलग प्रश्न के उत्तर की तरह लगता है IMHO
सेठ

3
@ सेठ, हां मैं हर समय उस बारीकियों से जलता रहता हूं, जो अगला तार्किक सवाल खड़ा करता है: क्या सीएस निम्नलिखित के लिए कोई वाक्यात्मक शॉर्टकट पेश करता है: MyVariable = MyMethod; अगर MyVariable? ... MyMethod कहाँ लौट सकता है undefined? या फिर आपको सहारा लेना चाहिए if typeof myVariable isnt 'undefined'?
कभी

1
@neverfox जहाँ तक मुझे पता है (अपरिभाषित प्रकार की जाँच) - CoffeeScript सोचता है कि अशक्त और अपरिभाषित को जब्त कर लिया जाना चाहिए।
सेठ

6
@ सेठ, सच में नहीं। गैर सख्त तुलना ( ==और !=) वास्तव में इलाज nullऔर undefinedबराबर मूल्यों के रूप में है, तो item != nullवास्तव में दोनों के लिए परीक्षण nullऔर undefinedएक ही समय में। ऐसा नहीं है, अगर यह लिखा है item !== null
toriningen

26

सबसे पहले, अपने प्रश्न का उत्तर देने के लिए:

if typeof myVariable isnt 'undefined' then # do stuff

मैग्रैग्स का समाधान ज्यादातर मामलों में काम करेगा, सिवाय इसके कि आपको अपरिभाषित और असत्य के बीच अंतर करने की आवश्यकता होती है (उदाहरण के लिए, यदि myVariable सही, गलत या अपरिभाषित हो सकता है)।

और सिर्फ इशारा करने के लिए, आपको कोष्ठक में अपनी शर्तों को लपेटना नहीं चाहिए, और आपको घुंघराले ब्रेसिज़ का उपयोग नहीं करना चाहिए।

thenअगर सब कुछ एक ही लाइन पर है कीवर्ड इस्तेमाल किया जा सकता है, अन्यथा खरोज का उपयोग इंगित करने के लिए क्या कोड हालत के अंदर है।

if something  
    # this is inside the if-statement  
# this is back outside of the if-statement

उम्मीद है की यह मदद करेगा!


isntकीवर्ड के बराबर है !=Coffeescript में, और यदि आप जावास्क्रिप्ट की आदत हो अधिक पठनीय हो सकता है।
एरॉन डफोर

12
के बराबर !==, नहीं!=
मिशा आरिफिएव

1
यह सबसे विशिष्ट उत्तर है - कई अन्य भी शून्य मानों के साथ बातचीत करते हैं। Thx
सेठ

1
@MischaArefiev !=in Coffee, जो !==जावास्क्रिप्ट में अनुवाद करता है।
सुजाना

14

यह उत्तर कॉफ़ीस्क्रिप्ट के पुराने संस्करण के लिए है। यदि आप अधिक उत्तर तिथि चाहते हैं तो (जुलाई 2014 तक) जैदर का उत्तर देखें।

यह कॉफ़ीस्क्रिप्ट वह करता है जो आप चाहते हैं कि मुझे लगता है:

if not MyVariable?
  MyVariable = "assign a value"

जो उत्पादन करता है:

if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
  MyVariable = "assign a value";
}

अगर आप इस कोड के रूप में अपरिभाषित पर MyVariableसेट MyVariableकरते हैं , तो Nb यदि आप पहली बार असाइनमेंट करते हैं , तो यह निम्नलिखित के लिए संकलित करता है:

if (!(MyVariable != null)) {
  MyVariable = "assign a value";
}

मेरा मानना ​​है कि यह काम करता है क्योंकि !=CoffeeScripts Existential Operator(प्रश्न चिह्न) द्वारा इस्तेमाल किया undefinedजा करने के लिए बराबर है null

ps क्या आप वास्तव if (MyVariable?false){ ... }में काम कर सकते हैं ? यह मेरे लिए तब तक संकलित नहीं होता जब तक कि अस्तित्व के संचालक और झूठे के बीच कोई स्थान न हो, MyVariable? falseजो तब कॉफीस्क्रिप्ट को एक फ़ंक्शन की तरह जाँचता है, क्योंकि falseयह सोचता है कि यह आपके लिए एक पैरामीटर है MyVariable, उदाहरण के लिए :

if MyVariable? false
  alert "Would have attempted to call MyVariable as a function"
else
  alert "but didn't call MyVariable as it wasn't a function"

पैदा करता है:

if (typeof MyVariable === "function" ? MyVariable(false) : void 0) {
  alert("Would have attempted to call MyVariable as a function");
} else {
  alert("but didn't call MyVariable as it wasn't a function");
}

3
यह पुरानी कॉफी लिपि है। variable?अब केवल चर को संकलित = अशक्त!
Gambai

@ गंबाई क्या आपको यकीन है? वेबसाइट अभी भी ... !== null coffeescript.org/#try:variable%3F
AJP

1
हां, कंपाइलर अब कभी-कभी चूक जाता है ! = अनुकूलन के रूप में अपरिभाषित क्योंकि जब कोड में चर को कहीं परिभाषित किया जाना चाहिए। मुझे कहना चाहिए क्योंकि संकलक हमेशा सही ढंग से काम नहीं करता है ...
सुजान

@Suzana_K जानकर अच्छा लगा। मुझे यकीन है कि इस प्रश्न के उत्तर में आने वाले लोग अप टू डेट उत्तर चाहते हैं, कृपया बेझिझक मेरा संपादन करें या एक नया उत्तर पोस्ट करें और मैं इसे अपने ऊपर से लिंक करूंगा। मैं ES6 / टाइपस्क्रिप्ट को अपनाने के बाद अब CoffeeScript का उपयोग नहीं करता हूं, इसलिए मैं उत्तर को अपडेट नहीं कर सकता। वास्तव में ऐसा लगता है कि जैडर का जवाब इसे कवर करता है: stackoverflow.com/a/10238211/539490
AJP


9

के अलावा Jaider के जवाब से ऊपर (मैं अपर्याप्त प्रतिष्ठा की वजह से टिप्पणी नहीं कर सकता है) , ध्यान रहे कि यह एक अलग मामला है होगा अगर यह एक वस्तु / सरणी के अंदर कुछ:

someArray['key']?

में परिवर्तित किया जाएगा:

someArray['key'] != null

Js2cfish.org से स्क्रीनशॉट :

js2coffee.org


यदि कुंजी मौजूद है, तो आप जांच कर रहे हैं, इसलिए यह समझ में आता है। यदि आपको यह भी जांचना है कि क्या सरणी मौजूद है, तो कुछ प्रयास करें? ['कुंजी']?
जोशुआ डेविसन

6

मैं सिर्फ उपयोग करता हूं:

if (myVariable)
    //do stuff

के रूप में अपरिभाषित मिथ्या है यह केवल सामान करेगा अगर myVariable अपरिभाषित नहीं है।

आपको बस यह जानना होगा कि यह उन मूल्यों के लिए 'सामान' करेगा जो 0, "" और अशक्त हैं


1
मैं इस विधि के रूप में लंबे समय के रूप पसंद करते हैं myVariableकी तरह एक falsy मूल्य होने की अनुमति नहीं है nullया 0
ब्रायन डाउनिंग

3

सबसे साफ तरीका जो मैंने एक चर को अपरिभाषित और नॉट-शून्य चर को असाइन करने के लिए पाया है unless:

unless ( myVar? )
    myVar = 'val'

6
myVar ?= 'val'
Ricket

2

सिर्फ OR मुहावरे का उपयोग क्यों नहीं किया गया?

myVar or 'val'

तो, परिणाम myVar के बराबर होगा, जब तक कि यह अपरिभाषित न हो कि किस स्थिति में यह 'val' के बराबर होगा।


3
इस मुहावरे के साथ कोई भी मिथ्या मूल्य 'वैल' लौटाएगा, बजाय इसके कि जो भी होना चाहिए - सहित '', 0.0और false। जो, शायद, अवांछित नहीं है।
toriningen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.