जावास्क्रिप्ट जांच के लिए शून्य नहीं है


133

नीचे एक कोड स्निपेट है, जहां हम एक फॉर्म वैल्यू प्राप्त करते हैं। यदि मूल्य शून्य नहीं है, तो आगे की जाँच से पहले।

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

किसी भी विचार ऐसा क्यों होता है .. ??


2
सीडब्ल्यू हुआ क्योंकि 6+ उपयोगकर्ताओं ने सवाल संपादित किया।
आप

! == के बजाय! =
GetBackerZ

जवाबों:


78

यह इसलिए है क्योंकि वैल नहीं है null, लेकिन इसमें शामिल है'null' एक स्ट्रिंग के रूप ।

'अशक्त' के साथ जाँच करने का प्रयास करें

if ('null' != val)

यह कब और क्यों काम करता है, इसकी व्याख्या के लिए, नीचे दिए गए विवरण देखें


2
होना चाहिए अगर (शून्य! = वैल) किसी भी तरह यह उद्धरण के साथ काम नहीं कर रहा था
आनंद

प्रश्न में मिस्टर, अशक्त था स्ट्रिंग के रूप में ... आपका मामला शायद अलग है
आर्सेन Mkrtchyan

145

यह आपके लिए चाल चलेगा

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
जबकि तकनीकी रूप से यह काम करता है, एक डबल नहीं (!!) एक प्रोग्रामिंग faux-pas है। यह वास्तव में के बराबर है if(val), जो पढ़ने के लिए बहुत स्पष्ट है। मैं उससे (फी उज्वल, !! वैल को तकनीकी रूप से C या C ++ में भी काम करना चाहिए) यहाँ जावास्क्रिप्ट ' सत्यता
विल बक

2
कैसे के बारे में ((बूलियन) ()
thedjaney

1
!! यह सिर्फ एक नकारात्मक है, इसलिए यह शाब्दिक रूप से कह रहा है अगर (वैली।)। मैं अभी भी जिस तरह से हालांकि यह लग रहा है पसंद है!
कुरई बंकसू

12
यह विफल हो जाएगा val = 0जब !!0से झूठे का मूल्यांकन
punkrockpolly

3
यह एक सरल दोहरा नकारात्मक नहीं है। यह एक ट्रांसफॉर्मिंग डबल नेगेटिव है। आप मूल रूप से चर को बूलियन में बदल रहे हैं। वहाँ इस विषय पर कहना लेकिन यह पर्याप्त कहना है कि मामलों में करने के लिए एक बहुत जहाँ आपके चर रहा है है 0, false, null, undefinedया कुछ इस तरह के मूल्य पर ले कर जाता है कि trueएक के साथ!, आप प्राप्त करने के लिए जा रहे हैं falseके लिए !!। यह बिल्कुल अगर इस्तेमाल किया जाना चाहिए।
गाइ पासी

83

"शून्य नहीं" की जांच करने के 3 तरीके हैं। मेरी सिफारिश स्ट्रिक्ट नॉट वर्जन का उपयोग करने की है।

1. सख्त संस्करण नहीं

if (val !== null) { ... }

सख्त नहीं संस्करण "सख्त समानता तुलना एल्गोरिथ्म" का उपयोग करता है http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6!== तुलना में तेज़ प्रदर्शन है!= , क्योंकि सख्त समानता तुलना एल्गोरिथ्म मान समान किरदार नहीं है ऑपरेटर।

2. गैर-सख्त संस्करण नहीं

if (val != 'null') { ... }

गैर-सख्त संस्करण "सार समानता समानता एल्गोरिथम" का उपयोग करता है http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 । की !=तुलना में धीमा प्रदर्शन है!== क्योंकि सार समानता तुलना एल्गोरिथ्म मूल्यों typecasts ऑपरेटर।

3. डबल संस्करण नहीं

if (!!val) { ... }

डबल नॉट वर्जन !!में स्ट्रिक्ट नॉट वर्जन !==और नॉन स्ट्रिक्ट नॉट वर्जन !=( https://jsperf.com/tfm-not-null/6 ) दोनों की तुलना में तेज प्रदर्शन है । हालाँकि, यह "Falsey" मानों को टाइप undefinedऔर NaNफाल्स में टाइप करेगा ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ) जो अप्रत्याशित परिणाम दे सकता है, और इसकी खराब पठनीयता है क्योंकि nullस्पष्ट रूप से नहीं कहा गया है।


यह बहुत अजीब है। !!valमेरे लिए काम किया है लेकिन val!==nullनहीं किया है। यह ऐसा क्यों है?
TheLogicGuy

@ TheLogicGuy - का डेटाटाइप क्या है val? console.log(typeof val)
tfmontague

नंबर। कोड सरणी (शून्य, 0 आदि) से "खराब" मान निकालता है। यहाँ कोड है: pastebin.com/L7Z1BtuL
TheLogicGuy

1
@ TheLogicGuy - आपकी वास्तविक समस्या का अशक्त से कोई लेना-देना नहीं है। NaN सही ढंग से फ़िल्टर नहीं कर रहा है - जो हमेशा सही रहेगा। यह काम करना चाहिए:! (IsNaN (val) && (typeof val! == "अपरिभाषित"))। जावास्क्रिप्ट में "सत्य" और "झूठी" के रूप में जाना जाता है। डबल-नहीं ऑपरेटर !!बस से अधिक निकाल देगा null। यह रूपांतरित होगा NaNऔर undefinedअसत्य में भी। और यही कारण है कि डबल नहीं-ऑपरेटर का उपयोग करते समय आपका सरणी सही ढंग से फ़िल्टर होता है !!
tfmontague

30

उपयोग के !==रूप !=में आप nontransitive जावास्क्रिप्ट सत्य तालिका अजीबता की दुनिया में मिल जाएगा।


जब तक आप विशेष रूप से undefinedया के लिए जाँच करना चाहते हैं null। ऐसी स्थिति में val != nullवापस आ जाएगी trueके लिए undefinedया nullलेकिन जैसे अन्य falsey मूल्यों के लिए नहीं 0
एरिक एच

8

आपको सख्त not equalsतुलना ऑपरेटर का उपयोग करना चाहिए !==ताकि यदि उपयोगकर्ता इनपुट करता है "null"तो आपको नहीं मिलेगा else


1
सुसान नल खुश नहीं होगा अगर उसका नाम डेटा प्रविष्टि फॉर्म में स्वीकार नहीं किया गया था
एंडीज


3

यह ठीक काम करना चाहिए ..

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }

2

यदि आप एक मान्य मान के रूप में 0 को शामिल करने में सक्षम होना चाहते हैं:

if (!!val || val === 0) { ... }

1

यह काम करेगा:

if (val) {
    alert("Not null");
} else {
    alert("Null");
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.