2014-06-25 9 views
5

हाल जावास्क्रिप्ट में मैंक्यों नहीं के बराबर अशक्त

if(data !== "") 

का उपयोग कर यदि डाटा शून्य है की जाँच करने के की आदत उठाया है है! == ""! == || अपरिभाषित || खाली स्ट्रिंग

जब मैं

if(data !== null) 
    //work here 

Resharper इस्तेमाल करने की कोशिश मुझ पर एक भयानक त्रुटि फेंकता है कह रही है कि

"क्वालीफायर अशक्त या अपरिभाषित हो सकता है"

enter image description here

मैंने स्पष्ट करने के लिए सिर्फ एक jFiddle जोड़ा है : JsFiddle

मेरा प्रश्न है: क्या यह एक रिशेर्पर त्रुटि है या इसके पीछे कुछ है?

+2

आप एक 'falsey' मूल्य के लिए जाँच करने के लिए चाहते हैं, यही कारण है कि अभी का उपयोग नहीं करता है, तो' (डेटा) {} ' – jfriend00

+0

आईई (पुराने) आईई के पुराने संस्करणों के लिए सही ढंग से काम नहीं करेगा, अगर डेटा को परिभाषित किया गया है आईई 7 मुझे विश्वास है कि – Pogrindis

+1

@ jfriend00 में त्रुटि होगी खाली रिक्त स्थान के लिए थोड़ा अंतर है '[]! = "" -> false' लेकिन '!! [] -> सच'। –

उत्तर

5

संक्षेप में, varnull है जब यह कहीं भी इंगित नहीं कर रहा है। दूसरी तरफ, var"" के बराबर एक परिभाषित var है जो एक चर के लिए इंगित करता है जिसमें एक खाली स्ट्रिंग होती है। यह अनिवार्य रूप से अलग है।

[संपादित करें] के रूप में @ jfriend00 सही ढंग से बताते हैं, null जावास्क्रिप्ट में एक विशिष्ट मूल्य है। अंतर तब होगा कि null"" से भिन्न मान है, जो एक खाली स्ट्रिंग है और शून्य नहीं है।

var के लिए सही मान जो प्रारंभ नहीं है undefined है।

+4

यहां 'शून्य' के अपने निश्चित वाक्य से सावधान रहें। जावास्क्रिप्ट में 'शून्य' एक विशिष्ट मान है। एक चर में केवल 'शून्य' होता है यदि इसे विशेष रूप से उस मान को असाइन किया गया हो। एक वैरिएबल जिसे प्रारंभ नहीं किया गया है, 'अपरिभाषित' होगा, न कि 'शून्य'। – jfriend00

1

अशक्त और अपरिभाषित उसी तरह

if (typeof data === "undefined") सच वापस आ जाएगी में इलाज किया जा सकता डेटा अपरिभाषित अगर है (या नल), तो

if (typeof data !== "undefined") 

सच वापस आ जाएगी, तो डेटा परिभाषित किया गया है (अकृत नहीं है), तो आप देख सकते हैं कि इसे रिक्त स्ट्रिंग है,

if (data.length == 0) 

सच वापस आ जाएगी अगर स्ट्रिंग खाली है।

9

सबसे पहले, आपकी आदत गलत है। उपयोग:

if(data !== "") 

केवल खाली स्ट्रिंग की जांच करेगा। यदि dataundefined या null है, तो यदि ब्लॉक अभी भी निष्पादित होगा क्योंकि !== किसी भी प्रकार के रूपांतरण किए बिना समानता के लिए जांच करता है।

दूसरा, रीशेपर को कोई समस्या नहीं है। यह आपको बताने की कोशिश कर रहा है कि आप कोई गलती कर रहे हैं। if(data !== null) केवल शून्य के खिलाफ जांच करेगा। undefined और एक खाली स्ट्रिंग अभी भी सच हो जाएगी और ब्लॉक को निष्पादित करने का कारण बन जाएगा।ReSharper आपको चेतावनी दे रहा है कि आप गलती कर रहे हैं (क्योंकि शायद ही कभी आपको null के लिए जांच करने की आवश्यकता है)।

बस याद रखें कि undefined !== null !== ""। आप कई शॉर्टकट का प्रयास कर सकते हैं जिनका उल्लेख किया जा रहा है लेकिन यदि आप वास्तव में अपना कोड पूरी तरह से चाहते हैं, तो बस तीनों की जांच करें। आप कोड बहुत लंबा होने के बारे में चिंतित हैं, एक उपयोगिता विधि करने के लिए चेक के लिए कदम:

function hasValue(var data) { 
    return (data !== undefined) && (data !== null) && (data !== ""); 
} 
संबंधित मुद्दे