अगर मैं इस तरह एक जावास्क्रिप्ट बूलियन चर घोषित करता हूं:
var IsLoggedIn;
और फिर इसे true
या तो के साथ प्रारंभ करें या 1
, क्या यह सुरक्षित है? या 1
वैरिएबल को एक नंबर बनाने के लिए इसे इनिशियलाइज़ करना होगा ?
अगर मैं इस तरह एक जावास्क्रिप्ट बूलियन चर घोषित करता हूं:
var IsLoggedIn;
और फिर इसे true
या तो के साथ प्रारंभ करें या 1
, क्या यह सुरक्षित है? या 1
वैरिएबल को एक नंबर बनाने के लिए इसे इनिशियलाइज़ करना होगा ?
जवाबों:
प्रकार आपके प्रारंभ के लिए निर्भर हैं:
var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool
लेकिन इस उदाहरण पर एक नज़र डालें:
var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean
आपका चर प्रकार जावास्क्रिप्ट में दिए गए मान पर निर्भर करता है।
नहीं यह सुरक्षित नहीं है। आप बाद में var कर सकते हैं IsLoggedIn = "Foo";
और JavaScript एक एरर नहीं फेंकेगी।
यह करना संभव है
var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);
आप गैर बूलियन चर को भी पास कर सकते हैं new Boolean()
और यह IsLoggedIn बूलियन बना देगा।
var IsLoggedIn = new Boolean(0); // false
var IsLoggedIn = new Boolean(NaN); // false
var IsLoggedIn = new Boolean("Foo"); // true
var IsLoggedIn = new Boolean(1); // true
(new Boolean(false)).toString()) === "false"
, धन्यवाद लिंक के लिए
जैसा कि यह बहुत उपयोगी ट्यूटोरियल कहता है:
var age = 0;
// bad
var hasAge = new Boolean(age);
// good
var hasAge = Boolean(age);
// good
var hasAge = !!age;
यदि आप IsLoggedIn
एक बूलियन के रूप में इलाज किया जाना चाहते हैं, तो आपको इस प्रकार शुरू करना चाहिए:
var IsLoggedIn=true;
यदि आप इसके साथ आरंभ करते हैं var IsLoggedIn=1;
तो इसे पूर्णांक माना जाएगा।
हालांकि किसी भी समय चर IsLoggedIn
एक अलग डेटा प्रकार को संदर्भित कर सकता है:
IsLoggedIn="Hello World";
इससे कोई त्रुटि नहीं होगी।
आप कम से कम उनकी 'परिभाषितता' के लिए असिंचित चर का उपयोग और परीक्षण कर सकते हैं। ऐशे ही:
var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false
इसके अलावा, कई कब्जे हैं: यदि आप सटीक प्रकारों में रुचि नहीं रखते हैं तो तुलना के लिए '==' ऑपरेटर (या (चर) / ([चर]) का उपयोग करें (यही कारण है कि डगलस क्रॉकफोर्ड 'सत्य' या '' कहते हैं) मिथ्या 'मुझे लगता है)। उस स्थिति में सचित्र या 1 या '1' को इकाईीकृत वैरिएबल में असाइन करने पर हमेशा पूछे जाने पर सच होता है। अन्यथा [यदि आपको टाइप सुरक्षित तुलना की आवश्यकता है] तुलना के लिए '===' का उपयोग करें।
var thisMayBeTrue;
thisMayBeTrue = 1;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
thisMayBeTrue = '1';
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, in this case, using == or !! '1' is implicitly
// converted to 1 and 1 is implicitly converted to true)
thisMayBeTrue = true;
alert(thisMayBeTrue == true); //=> true
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> true
thisMayBeTrue = 'true';
alert(thisMayBeTrue == true); //=> false
alert(!!thisMayBeTrue); //=> true
alert(thisMayBeTrue === true); //=> false
// so, here's no implicit conversion of the string 'true'
// it's also a demonstration of the fact that the
// ! or !! operator tests the 'definedness' of a variable.
पुनश्च: आप किसी भी प्रकार के चर के लिए 'परिभाषितता' का परीक्षण नहीं कर सकते। इसलिए:
alert(!!HelloWorld);
एक संदर्भ त्रुटि देता है ('हैलोवर्ल्ड परिभाषित नहीं है')
('परिभाषितता' के लिए एक बेहतर शब्द है? वैसे भी मेरे डच क्षमा करें; ~)
thisMayBeTrue = '';
- खाली स्ट्रिंग गलत होने के बाद आपको समान परिणाम नहीं मिलेंगे। "पुनश्च: आप कर सकते हैं नहीं परीक्षण हालांकि चर nonexisting के लिए 'definedness'" - सुनिश्चित करें कि आप कर सकते हैं: typeof HellowWorld === 'undefined'
।
जावास्क्रिप्ट में चर एक प्रकार नहीं है। गैर-शून्य, गैर-शून्य, गैर-खाली और true
"सच्चे" हैं। शून्य, अशक्त, अपरिभाषित, खाली स्ट्रिंग औरfalse
"झूठे" हैं।
एक बूलियन प्रकार है, हालांकि, शाब्दिक हैं true
और false
।
2 + 2
बनाम "2" + 2
। typeof
संचालक भी देखें ।
इस जैसे किसी और के बारे में क्या राय है:
var MyNamespace = {
convertToBoolean: function (value) {
//VALIDATE INPUT
if (typeof value === 'undefined' || value === null) return false;
//DETERMINE BOOLEAN VALUE FROM STRING
if (typeof value === 'string') {
switch (value.toLowerCase()) {
case 'true':
case 'yes':
case '1':
return true;
case 'false':
case 'no':
case '0':
return false;
}
}
//RETURN DEFAULT HANDLER
return Boolean(value);
}
};
तो आप इसे इस तरह से उपयोग कर सकते हैं:
MyNamespace.convertToBoolean('true') //true
MyNamespace.convertToBoolean('no') //false
MyNamespace.convertToBoolean('1') //true
MyNamespace.convertToBoolean(0) //false
मैंने इसे प्रदर्शन के लिए परीक्षण नहीं किया है, लेकिन टाइप से टाइप में परिवर्तित करना बहुत बार नहीं होना चाहिए अन्यथा आप अपने ऐप को अस्थिरता तक खोल देते हैं!
चर वह बन जाएगा जो आप कभी भी टाइप करते हैं। शुरू में यह है undefined
। यदि आप इसे असाइन करते हैं तो 'true'
यह एक स्ट्रिंग बन जाएगा, यदि आप इसे असाइन करते हैं तो true
यह एक बूलियन बन जाएगा, यदि आप इसे असाइन करते हैं तो 1
यह एक नंबर बन जाएगा। बाद में असाइनमेंट चर के प्रकार को बाद में बदल सकते हैं।