2011-04-14 19 views
11

मुझे सर्वर से जेसन "false" मिला। मैं bool के रूप में प्रतिक्रिया देता हूं लेकिन यह जेसन है इसलिए यह ब्राउज़र प्रकार में bool के बजाय है।मैं जावास्क्रिप्ट में स्ट्रिंग और बूलियन की तुलना कैसे करूं?

तो यदि मैं चलाता हूं तो जब भी मैं "false" == false जांचना चाहता हूं तो वे काम नहीं करते हैं।

तो मैं bool को String से जावास्क्रिप्ट में कैसे पार्स कर सकता हूं?

"true" == true और "false" == false। फिर कोड (!data) जांच कर सकते हैं कि यह क्या [true और false]

उत्तर

12

मैं स्पष्ट रूप से स्ट्रिंग "true" की जांच करूँगा।

let data = value === "true"; 

नहीं तो आप JSON.parse() का उपयोग यह एक देशी JavaScript मान कन्वर्ट करने के लिए कर सकता है, लेकिन यह भूमि के ऊपर का एक बहुत है कि अगर आप जानते हैं कि यह केवल तार "true" या "false" आप प्राप्त करेंगे है।

+1

JSON.parse() डीकोड करेगा सर्वर बो ओलेन जावास्क्रिप्ट बूलियन, ताकि आप कॉल कर सकें (! myJSONObject.myBool) यह eval की तुलना में अधिक अनुशंसित है। json.org –

+1

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

+0

@chomp यह सवाल का जवाब देता है * मैं जावास्क्रिप्ट में स्ट्रिंग से बूल को कैसे पार्स कर सकता हूं? * हालांकि, मैं बस स्ट्रिंग 'झूठी' की जांच करता हूं। – alex

0
String.prototype.revalue= function(){ 
    if(/^(true|false|null|undefined|NaN)$/i.test(this)) return eval(this); 
    if(parseFloat(this)+''== this) return parseFloat(this); 
    return this; 
} 

से है: http://www.webdeveloper.com/forum/showthread.php?t=147389

असल में, तुम सिर्फ पहला "अगर" समारोह से बयान की जरूरत है - परीक्षण सही या गलत लगता है कोड और यह eval रों, यह बूलियन मान

+3

(जैसे स्ट्रिंग के रूप में) एक आधार वर्ग के कार्यों को जोड़ने रख-रखाव और स्पष्टता मुद्दों को उठाने जाता –

+3

जबकि चतुर -।। और हो सकता है कि मैं टाइप सुरक्षा के लिए सिर्फ एक स्टिकर हूं - मैं किसी भी व्यावहारिक उद्देश्य के लिए कभी भी इस कोड का उपयोग करने के लिए प्रोत्साहित नहीं करता हूं। –

3

में बदल में अभिव्यक्ति डेटा == "सच"

टेस्ट का प्रयास करें:

डेटा = "false" - मूल्य झूठी हो जाएगा

तारीख = "true" - मूल्य

भी सच हो, आपके JSON ठीक कर देंगे। जेएसओएन बूलियन को ठीक से संभाल सकता है।

+1

+1 "अपने JSON को ठीक करें" के लिए +1। –

2

इसकी सिर्फ एक json "गलत"/"सही", तो आप उपयोग कर सकते हैं,

if(! eval(data)){ 
    // Case when false 
} 

यह अधिक क्लीनर होगा यदि आप सर्वर से केवल JSON डेटा स्वीकार करने के लिए कोड को प्रतिबंधित, और हमेशा jsonParse या इसे JS ऑब्जेक्ट (पर जेवलरी जेजेएसओएन की तरह कुछ करें। यह केवल JSON प्रतिक्रिया स्वीकार करता है और इसे कॉलबैक फ़ंक्शन पर जाने से पहले ऑब्जेक्ट पर पार्स करता है)।

इस तरह आप न केवल बुलियन से बूलियन प्राप्त करेंगे, बल्कि यह अन्य सभी डेटाटाइप भी बनाए रखेगा, और फिर आप विशेष लोगों के बजाय नियमित अभिव्यक्ति विवरणों के लिए जा सकते हैं।

हैप्पी कोडिंग।

1

मुझे लगता है कि आपको यह देखने की आवश्यकता है कि JSON डेटा कैसे उत्पन्न किया जा रहा है। आप JSON में निश्चित रूप से एक सामान्य जेएस बूलियन झूठा कर सकते हैं।

{ "मान 1": झूठे, "मान 2": सच}

8

"अगर ऑपरेंड में से एक बूलियन है, बूलियन संकार्य 1 करने के लिए +0 बदल जाती है अगर यह सच है और अगर यह गलत है।"(from MDN Comparison Operators page)

उदाहरण:

true == "true"; //false 
true == "1"; //true 
false == "false"; //false 
false == ""; //true 
false == "0"; //true 
3
var data = true; 
data === "true" //false 
String(data) === "true" //true 

यह ठीक काम करता है

संबंधित मुद्दे