जावास्क्रिप्ट में एक बूलियन की घोषणा बस संस्करण का उपयोग कर


89

अगर मैं इस तरह एक जावास्क्रिप्ट बूलियन चर घोषित करता हूं:

var IsLoggedIn;

और फिर इसे trueया तो के साथ प्रारंभ करें या 1, क्या यह सुरक्षित है? या 1वैरिएबल को एक नंबर बनाने के लिए इसे इनिशियलाइज़ करना होगा ?


27
यह वास्तव में इस बात पर निर्भर करता है कि आप "सुरक्षित" से क्या मतलब है, जावास्क्रिप्ट में कोई "सुरक्षित" नहीं है।
एंथनीवजोन

जवाबों:


164

प्रकार आपके प्रारंभ के लिए निर्भर हैं:

var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool

लेकिन इस उदाहरण पर एक नज़र डालें:

var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean

आपका चर प्रकार जावास्क्रिप्ट में दिए गए मान पर निर्भर करता है।


1
क्या होगा अगर मैं सीधे बूलियन चर को बूलियन घोषित करता हूं। यह है कि किसी भी प्रदर्शन में
सुधार

20

नहीं यह सुरक्षित नहीं है। आप बाद में 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

6
नए बुलियन () का उपयोग न करें; IsLoggedIn उन सभी स्थितियों में सत्य का मूल्यांकन करेगा (हाँ, नया बूलियन (असत्य) सत्य है)।
मील

@Miles: नई बूलियन (गलत) झूठी नहीं सच है
जनवरी

5
@ भजन: stackoverflow.com/a/8695363if (new Boolean(false)) alert ('wat') देखें
मीलों

@Miles अतुल्य, के रूप में (new Boolean(false)).toString()) === "false", धन्यवाद लिंक के लिए
जनवरी

10

जैसा कि यह बहुत उपयोगी ट्यूटोरियल कहता है:

var age = 0;

// bad
var hasAge = new Boolean(age);

// good
var hasAge = Boolean(age);

// good
var hasAge = !!age;

शायद कोई वास्तविक स्पष्टीकरण नहीं। कोई भी एक ट्यूटोरियल के माध्यम से कंघी नहीं करना चाहता है जिसे आप एक टीएल में निर्दिष्ट कर सकते हैं, अपने पोस्ट में
ड्रिंक

7

यदि आप IsLoggedInएक बूलियन के रूप में इलाज किया जाना चाहते हैं, तो आपको इस प्रकार शुरू करना चाहिए:

var IsLoggedIn=true;

यदि आप इसके साथ आरंभ करते हैं var IsLoggedIn=1;तो इसे पूर्णांक माना जाएगा।

हालांकि किसी भी समय चर IsLoggedInएक अलग डेटा प्रकार को संदर्भित कर सकता है:

 IsLoggedIn="Hello World";

इससे कोई त्रुटि नहीं होगी।


5

आप कम से कम उनकी 'परिभाषितता' के लिए असिंचित चर का उपयोग और परीक्षण कर सकते हैं। ऐशे ही:

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'
nnnnnn

2

जावास्क्रिप्ट में चर एक प्रकार नहीं है। गैर-शून्य, गैर-शून्य, गैर-खाली और true"सच्चे" हैं। शून्य, अशक्त, अपरिभाषित, खाली स्ट्रिंग औरfalse "झूठे" हैं।

एक बूलियन प्रकार है, हालांकि, शाब्दिक हैं trueऔर false


जेएस वेरिएबल्स में एक प्रकार का अर्थ नहीं है कि आप एक वैरिएबल की घोषणा नहीं कर सकते हैं जो केवल पूर्णांक या तार (जैसा कि कुछ अन्य भाषाओं में होता है) को धारण करेगा, लेकिन किसी भी समय चर द्वारा आयोजित विशेष मूल्य हमेशा होगा एक प्रकार। और प्रकार के रूप में की तरह एक सरल उदाहरण के साथ दिखाया जा सकता है मायने रखती है 2 + 2बनाम "2" + 2typeofसंचालक भी देखें ।
nnnnnn

2

इस जैसे किसी और के बारे में क्या राय है:

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

मैंने इसे प्रदर्शन के लिए परीक्षण नहीं किया है, लेकिन टाइप से टाइप में परिवर्तित करना बहुत बार नहीं होना चाहिए अन्यथा आप अपने ऐप को अस्थिरता तक खोल देते हैं!


2
क्यों गिरा वोट? कृपया समझाएं ताकि हम सभी लाभान्वित हो सकें।
TruMan1

1

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

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