झूठा मूल्य बनाम अशक्त, अपरिभाषित या खाली स्ट्रिंग


11

मैंने वर्षों से jQuery के साथ काम किया है। हालाँकि, हाल ही में, मैंने स्वयं को जावास्क्रिप्ट भाषा में गहराई से पाया है। हाल ही में, मैंने "सत्य" और फाल्सी मूल्यों के बारे में सुना है। हालाँकि, मैं उन्हें पूरी तरह से नहीं समझता। वर्तमान में, मेरे पास कुछ कोड है जो इस तरह दिखता है:

var fields = options.fields || ['id', 'query'];

मुझे यह पहचानने की आवश्यकता है कि क्या क्षेत्र अशक्त, अपरिभाषित है या जिनकी लंबाई 0. है, मुझे पता है कि ऐसा करने का लंबा तरीका है:

if ((fields === null) || (fields === undefined) || (fields.length === 0)) {
 ...                    
}

मेरा सवाल है, निम्नलिखित एक ही है:

if (!fields)  {
 ...
}

जवाबों:


23

प्रोग्रामिंग में, सत्यता या झूठीपन उन बूलियन अभिव्यक्तियों की गुणवत्ता है जो वास्तविक बूलियन मूल्य का समाधान नहीं करते हैं, लेकिन फिर भी एक बूलियन परिणाम के रूप में व्याख्या की जाती है।

सी के मामले में, शून्य का मूल्यांकन करने वाले किसी भी अभिव्यक्ति को गलत माना जाता है। जावास्क्रिप्ट में, अभिव्यक्ति valueमें

if(value) {
}

सही valueनहीं होने पर मूल्यांकन करेंगे :

null
undefined
NaN
empty string ("")
0
false

यह भी देखें
कि जावास्क्रिप्ट में अशक्त, अपरिभाषित या रिक्त चर की जांच करने के लिए एक मानक कार्य है?


9

जावास्क्रिप्ट में "ट्रू" और "फाल्सी" मानों का सेट ईसीएमएस्क्रिप्ट ToBooleanस्क्रिप्ट में परिभाषित अमूर्त ऑपरेशन से आता है , जिसका उपयोग एक बूलियन के लिए एक मान को सहते समय किया जाता है:

+--------------------------------------------------------------------------+
| Argument Type | Result                                                   |
|---------------+----------------------------------------------------------|
| Undefined     | false                                                    |
|---------------+----------------------------------------------------------|
| Null          | false                                                    |
|---------------+----------------------------------------------------------|
| Boolean       | The result equals the input argument (no conversion).    |
|---------------+----------------------------------------------------------|
| Number        | The result is false if the argument is +0, 0, or NaN;   |
|               | otherwise the result is true.                            |
|---------------+----------------------------------------------------------|
| String        | The result is false if the argument is the empty String  |
|               | (its length is zero); otherwise the result is true.      |
|---------------+----------------------------------------------------------|
| Object        | true                                                     |
+--------------------------------------------------------------------------+

इस तालिका से, हम देख सकते हैं कि nullऔर undefinedदोनों falseएक बूलियन संदर्भ में हैं। हालाँकि, आपका fields.length === 0आम तौर पर गलत मूल्य पर नक्शा नहीं होता है। यदि fields.lengthएक स्ट्रिंग है, तो इसे माना जाएगा false(क्योंकि एक शून्य-लंबाई स्ट्रिंग है false), लेकिन अगर यह एक ऑब्जेक्ट (एक सरणी सहित) है तो इसके लिए बाध्य होगा true

यदि fieldsएक तार होना चाहिए, तो !fieldsएक पर्याप्त विधेय है। यदि fieldsएक सरणी है, तो आपकी सबसे अच्छी जांच हो सकती है:

if (!fields || fields.length === 0)

2

संक्षिप्त जवाब:

नहीं , वे समान नहीं हैं।

लेकिन यह:

if (!fields) { ... }

इस प्रकार है:

if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) { ...
}

लंबे (और बेहतर) उत्तर:

आइए सबसे पहले सत्य और मिथ्या मूल्यों की बात करते हैं।

यह सब तब होता है जब आप एक बूलियन के रूप में किसी चीज का मूल्यांकन करते हैं। जावास्क्रिप्ट में, यह तब होता है जब आप ifबयान जैसी चीजों का उपयोग करते हैं ; तार्किक ऑपरेटरों की तरह ||, !या &&; या Boolean()समारोह।

Boolean()समारोह एक मूल्य या नहीं और फिर स्वीकार करता है trueया false

उदाहरण के लिए:

var age = 1; // Let's evaluate age as a boolean Boolean(age); // true

आगे बढ़ो और इसे नोड उत्तर में आज़माएं।

बूलियन केवल किया जा सकता है trueया falseहै, तो के रिटर्न मान Boolean() चाहिए या तो trueया false। इस मामले में, हम मूल्य में पारित हुए 1, और जब एक बूलियन के रूप में मूल्यांकन किया जाता 1है true

महत्वपूर्ण: जब एक बूलियन के रूप में मूल्यांकन किया जाता है, तो एक मूल्य सही या गलत होना चाहिए। वे केवल दो विकल्प हैं।

जावास्क्रिप्ट में, केवल 6 झूठे मूल्य हैं। मान falseजब एक बूलियन के रूप में मूल्यांकन किया जाएगा । वे हैं: false, 0, "", null, undefined, और NaN। इसलिए अगर इनमें से किसी भी मूल्य का मूल्यांकन एक बूलियन के रूप में किया जाता है, तो वे गलत होंगे:

Boolean(false) // false Boolean(0) // false Boolean("") // false Boolean(null) // false Boolean(undefined) // false Boolean(NaN) // false

इसका मतलब यह है कि जावास्क्रिप्ट में किसी भी अन्य मूल्य, trueजब एक बूलियन के रूप में मूल्यांकन किया जाएगा । तो जावास्क्रिप्ट में हर दूसरे मूल्य सत्य है।

ऑपरेटर booleanका उपयोग करके कुछ के रूप में मूल्यांकन करने का एक और आसान तरीका है !Booleanफ़ंक्शन की तरह , यह एक बूलियन के रूप में एक मूल्य का मूल्यांकन करता है। लेकिन सत्य मूल्य बन जाते हैं falseऔर मिथ्या मूल्य बन जाते हैं true

!false // true !0 // true !"" / true !null // true !undefined // true !NaN // true

फिर से, नोड उत्तर या कुछ और में यह सुनिश्चित करने के लिए प्रयास करें कि आप समझ रहे हैं।

तो यह कथन:

if (!fields) { ... }

निम्नलिखित कह रहा है: "यदि fields, जब एक बूलियन के रूप में मूल्यांकन किया जाता है, गलत है, तो इस कथन के अंदर कोड चलाएं।"

अपने पहले बयान के लिए के रूप में:

var fields = options.fields || ['id', 'query'];

आप तार्किक या ऑपरेटर के साथ काम कर रहे हैं, जो यह सुनिश्चित करने के बारे में पढ़ने लायक है कि आप क्या समझते हैं। https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators


0

आपके कोड का अर्थ है:

var fields;
if (options.fields)
    fields = options.fields;
else
    fields = ['id', 'query'];

अब options.fieldsएक बूलियन मान में परिवर्तित किया जाता है। परिभाषा के अनुसार null, undefined, 0, ""में बदल जाती है false, (अधिकतर) और कुछ में बदल जाती है true(लेकिन मैं इतना सटीक होना करने के लिए नहीं करना चाहते हैं)।

इसका मतलब एक ही नहीं है, क्योंकि fields.length === 0रेखा। खाली सरणियों और अन्य वस्तुओं को परिवर्तित किया जाता है true

नोट: जावास्क्रिप्ट कभी-कभी एक बड़ी गड़बड़ी है ... उदाहरण के लिए 2 प्रकार के चेकिंग ऑपरेटरों (टाइपोफ़ और इंस्टाफॉफ़) की कोई वास्तविक आवश्यकता नहीं है। यह सिर्फ ppl को भ्रमित true instanceof Booleanकरता है जब काम नहीं करता है और typeof(true) == "boolean"स्वत: पूर्णता के बिना एक स्ट्रिंग टाइप करने के कारण त्रुटि प्रवण है। शायद कुछ नए संस्करणों में ये समस्याएं हल हो जाएंगी।


-1

आप कोशिश कर सकते हैं (!! फ़ील्ड्स) यदि फ़ील्ड एलिमेंट अशक्त है, अपरिभाषित है या इसकी लंबाई 0 है तो यह सच होगा। या (!!! फ़ील्ड्स) तो यह सच होगा।

दोगुना ! या !! सत्य या असत्य पर बल देगा। काश मैं इसके लिए एक अच्छी परिभाषा पा सकूँ लेकिन मुझे लगता है कि यह फिर से नहीं मिल पाएगी।


1
"!!!" के समान है "!" परिभाषा के अनुसार, "!!!!!" तथा "!!!!!!!"। "नोटिंग" एक मूल्य का उपयोग यह पुष्टि करने के लिए किया जा सकता है कि कुछ सत्य या गलत है, जिसमें निश्चित रूप से अपना स्थान है, लेकिन यह ओपी के सवाल का पूरी तरह से जवाब नहीं देता है। अर्थात्, वास्तव में सत्य या झूठे मूल्य क्या हैं?
जेफरी स्वीनी

मुझे एक लेख मिला जो बेहतर नहीं ऑपरेटर का वर्णन करता है: bennadel.com/blog/… developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… यह आपकी स्थिति को बूलियन मान में बदल देगा।
रैंडी कोलियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.