Frage

Wenn ich deklarieren einen JavaScript boolean Variable wie folgt:

var IsLoggedIn;

Und dann initialisieren es mit entweder true oder 1, ist das sicher? Oder wird es mit 1 machen die Variable eine Zahl initialisiert?

War es hilfreich?

Lösung

Typen sind abhängig zu Ihrer Initialisierung:

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

Aber werfen Sie einen Blick auf dieses Beispiel:

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

Ihre Variablen Typ ist abhängig von dem zugewiesenen Wert in JavaScript.

Andere Tipps

Nein, es ist nicht sicher. Sie könnten später var IsLoggedIn = "Foo"; tun und JavaScript nicht einen Fehler aus.

Es ist möglich, zu tun

var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);

Sie können auch die nicht boolean Variable in die new Boolean() passieren und es wird IsLoggedIn boolean machen.

var IsLoggedIn = new Boolean(0); // false
var IsLoggedIn = new Boolean(NaN); // false
var IsLoggedIn = new Boolean("Foo"); // true
var IsLoggedIn = new Boolean(1); // true

Da diese sehr nützlich Tutorial sagt:

var age = 0;

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

// good
var hasAge = Boolean(age);

// good
var hasAge = !!age;

Wenn Sie IsLoggedIn als boolean behandelt werden Sie initialisieren sollte wie folgt:

var IsLoggedIn=true;

Wenn Sie initialisieren es mit var IsLoggedIn=1; dann wird es als Integer behandelt werden.

Jedoch jederzeit die Variable IsLoggedIn in einen anderen Datentyp beziehen könnte:

 IsLoggedIn="Hello World";

Dies wird nicht zu einem Fehler.

Sie können Verwendung und Test nicht initialisierten Variablen zumindest für ihre 'Definiert'. Wie folgt aus:

var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false

Darüber hinaus gibt es viele weitere Möglichkeiten: wenn Sie in dem genauen Typen nicht interessiert sind verwenden, um die '==' Operator (! Oder [Variable] / !! [Variable]) zum Vergleich (das ist, was Douglas Crockford nennt ‚truthy 'oder ‚falsy‘ glaube ich). In diesem Fall der Zuordnung wahr oder 1 oder ‚1‘ auf die unitialized Variable immer true zurück, wenn Sie gefragt werden. Ansonsten [wenn Sie eingeben müssen sicher Vergleich] verwenden ‚===‘ zum Vergleich.

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.

PS: Sie können nicht testen ‚Definiert‘ für nicht vorhandene Variablen though. Also:

alert(!!HelloWorld);

gibt einen Hinweis Error ( 'Hello World ist nicht definiert')

(gibt es ein besseres Wort für 'Definiert' meine holländischen Pardon sowieso;? ~)

Variablen in Javascript hat keinen Typen. Nicht Null ist, nicht leer ist, nicht leer und true sind „true“. Null, null, nicht definiert, leere Zeichenkette und false ist "false".

Es gibt einen Booleschen Typ obwohl, wie Literale true und false sind.

Wie wäre es etwa so:

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);
    }
};

Dann können Sie es wie folgt verwendet werden:

MyNamespace.convertToBoolean('true') //true
MyNamespace.convertToBoolean('no') //false
MyNamespace.convertToBoolean('1') //true
MyNamespace.convertToBoolean(0) //false

Ich habe es nicht für die Leistung getestet, aber vom Typ Umwandlung zu oft geben sollte sonst nicht passieren Sie Ihre App zu Instabilität großer Zeit öffnen!

Die Variable wird zu dem, was jemals gibt es Ihnen zuweisen. Zunächst ist es undefined. Wenn Sie zuweisen 'true' es wird ein String werden, wenn Sie zuweisen es true es wird ein boolean werden, wenn Sie zuweisen es 1 es wird eine Reihe geworden. Nachfolgende Zuweisungen kann die Art der die Variable später ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top