2012-05-17 17 views
5

मैं नोड जानने के लिए कोशिश कर रहा हूँ अशक्त हो सकता है और समारोह है:नोड जे एस में स्ट्रिंग की लंबाई निर्धारित करने जब स्ट्रिंग

this.logMeIn = function(username,stream) { 
    if (username === null || username.length() < 1) { 
    stream.write("Invalid username, please try again:\n\r"); 
    return false; 
    } else { 
    ....etc 

और मैं इसे पारित कर रहा हूँ

if (!client.loggedIn) { 
    if (client.logMeIn(String(data.match(/\S+/)),stream)) { 

मैं कोशिश की है दोनों == और ===, लेकिन मैं अभी भी त्रुटि के रूप में उपयोगकर्ता नाम पता नहीं लगा पा रहा है यह शून्य है, और username.length() हो रही है विफल रहता है पर:

if (username === null || username.length() < 1) { 
           ^
TypeError: Property 'length' of object null is not a function 

मुझे लगता है कि यकीन है कि नोड || के दूसरे भाग का मूल्यांकन नहीं करेगा अगर कथन में पहला भाग सत्य है - लेकिन मैं समझने में असफल रहा कि अगर कथन का पहला भाग झूठा मूल्यांकन कर रहा है तो उपयोगकर्ता नामक शून्य वस्तु है। क्या कोई मुझे समझने में मदद कर सकता है कि मैंने क्या गलत किया है?

+0

इस टिप्पणी को हटाएं और इसे मेरे उत्तर में जोड़ें, हम अपने उत्तर के तहत चैट करना जारी रखेंगे। – Engineer

उत्तर

3

आप username तर्क के रूप में String(data.match(/\S+/)) गुजर रहे हैं, इसलिए जब data.match(/\S+/)null है, तो आप "null"username के लिए नहीं null मिलता है, के रूप में:

if(username === null || username === "null" || username.length < 1) 
+0

यदि वह स्ट्रिंग '" शून्य "प्राप्त कर रहा था, तो उसे 'शून्य" पर कोई त्रुटि नहीं मिलेगी। लम्बाई "' - यह 4 होगा। – jmar777

+0

@ jmar777 यह इस मामले में मीटर नहीं है,' कारण 'उपयोगकर्ता नाम === "शून्य" 'उस मामले में' सत्य 'है, और' if' का शरीर निष्पादित किया जाएगा। – Engineer

+0

दाएं, लेकिन मौजूदा कोड 'शून्य' की तुलना कर रहा है, न कि 'null'' - इसलिए '.length' को कॉल करते समय त्रुटि अलग होती है। हालांकि यह मजेदार' स्ट्रिंग (data.match()) चीज़ पर एक अच्छी पकड़ थी। – jmar777

7

length एक विशेषता है, एक समारोह नहीं है। username.length

+0

या तो 'उपयोगकर्ता नाम' कोई स्ट्रिंग नहीं है या आप कुछ गलत कर रहे हैं! – Amberlamps

+0

मैं गलत था - लंबाई बीतने वाली स्ट्रिंग की लंबाई का सही मूल्यांकन कर रही है। हालांकि, यह मूल समस्या को हल नहीं करता है कि मुझे कैसे पता चलेगा कि क्या मैं एक शून्य वस्तु पारित कर रहा हूं? शून्य। लम्बाई का मूल्यांकन नहीं करता है ?! –

1

प्रयास करें आप एक गैर रिक्त स्ट्रिंग की आवश्यकता होती है, तो आप एक साधारण "truthy" चेक कि null के लिए काम करेंगे, undefined, '', आदि कर सकते हैं:

if (username) { ... } 
कि दृष्टिकोण के साथ

, आप डॉन ' टी को भी .length चेक की आवश्यकता है। इसके अलावा, length एक संपत्ति है, एक विधि नहीं है।


संपादित करें: आपके पास कुछ मज़ाक चल रहा है। मुझे लगता है कि आपको अपने उपयोगकर्ता नाम में कैसे गुजरना है, इस बारे में शुरुआत करने की आवश्यकता है - मुझे नहीं लगता कि आपका String(data.match(/\S+/)) तर्क उस तरीके से व्यवहार कर रहा है जिसकी आप अपेक्षा कर रहे हैं (इस पर स्पॉट करने के लिए @Engineer को श्रेय दें)।

आपकी मिलान अभिव्यक्ति एक या दो प्रकार के मान वापस करने जा रही है: null या Array। यदि यह शून्य है, जैसा कि @Engineer ने इंगित किया है, तो आप एक स्ट्रिंग के रूप में "null" में गुजरते हैं, जिसके परिणामस्वरूप बाद में अपना उपयोगकर्ता नाम चेक पास कर देना चाहिए। - कि ईमानदारी से भावना का एक बहुत नहीं है

if (!client.loggedIn) { 
    var matches = data.match(/\S+/); 
    if (client.logMeIn(matches ? matches[0] : '',stream)) { 

के बारे में .length सभी मामलों में 1 के बराबर किया जा रहा है: आप को यह संशोधन पर विचार करना चाहिए। मैं क्या कर रहा हूं यह जानने और समझने के लिए console.log() कथनों को जोड़ने की सलाह दूंगा।

+0

यह मूल्यांकन (धन्यवाद) के पहले भाग के साथ समस्या को हल करता है, लेकिन अब उपयोगकर्ता नाम। लम्बाई हमेशा 1 का मूल्यांकन करता है, भले ही डेटा कितना समय आ रहा हो। कोई विचार? –

+0

एचआरएम, असल में - यह या तो काम नहीं कर रहा है ... अगर (उपयोगकर्ता नाम) सच में मूल्यांकन कर रहा है कि यह शून्य है या नहीं ... –

+0

मैं अंततः लम्बाई जांच अधिक चाहता हूं ... यह अधिक जटिल तर्क के लिए प्लेसहोल्डर है । –

1
:

String(null) === "null" 

तो तुम अपनी हालत को बदलने की जरूरत

यदि (हम नामकरण === शून्य || username.toString() लंबाई < 1)

मैंने उपयोग किया (उपयोगकर्ता नाम === शून्य || उपयोगकर्ता नाम। लम्बाई < 1) और यह लंबाई जांच में विफल रहा।