Wenn ich eine boolesche JavaScript-Variable wie folgt deklariere:
var IsLoggedIn;
Und dann initialisiere es mit entweder true
oder 1
, ist das sicher? Oder wird beim Initialisieren 1
die Variable zu einer Zahl?
javascript
boolean
mrblah
quelle
quelle
Antworten:
Die Typen hängen von Ihrer Initialisierung ab:
Aber schauen Sie sich dieses Beispiel an:
Der Typ Ihrer Variablen hängt vom zugewiesenen Wert in JavaScript ab.
quelle
Nein, es ist nicht sicher. Sie könnten später var tun
IsLoggedIn = "Foo";
und JavaScript wird keinen Fehler auslösen.Es ist möglich zu tun
Sie können auch die nicht-boolesche Variable an übergeben
new Boolean()
, wodurch IsLoggedIn boolesch wird.quelle
if (new Boolean(false)) alert ('wat')
Siehe stackoverflow.com/a/8695363(new Boolean(false)).toString()) === "false"
, danke für den LinkWie dieses sehr nützliche Tutorial sagt:
quelle
Wenn Sie
IsLoggedIn
als Boolescher Wert behandelt werden möchten , sollten Sie Folgendes initialisieren:Wenn Sie es mit initialisieren,
var IsLoggedIn=1;
wird es als Ganzzahl behandelt.Die Variable kann sich jedoch
IsLoggedIn
jederzeit auf einen anderen Datentyp beziehen:Dies verursacht keinen Fehler.
quelle
Sie können nicht initialisierte Variablen verwenden und zumindest auf ihre 'Definiertheit' testen. So was:
Darüber hinaus gibt es viele Möglichkeiten: Wenn Sie nicht an genauen Typen interessiert sind, verwenden Sie den Operator '==' (oder! [Variable] / !! [Variable]) zum Vergleich (das nennt Douglas Crockford 'wahr' oder ') Falschheit 'denke ich). In diesem Fall gibt das Zuweisen von true oder 1 oder '1' zur unitialisierten Variablen immer true zurück, wenn Sie dazu aufgefordert werden. Andernfalls [wenn Sie einen typsicheren Vergleich benötigen] verwenden Sie '===' zum Vergleich.
PS: Sie können die 'Definiertheit' jedoch nicht auf nicht vorhandene Variablen testen. So:
gibt einen Referenzfehler an ('HelloWorld ist nicht definiert')
(Gibt es ein besseres Wort für "Definiertheit"? Verzeihen Sie meinen Holländern trotzdem; ~)
quelle
thisMayBeTrue = '';
Sie erhalten nicht die gleichen Ergebnisse, da eine leere Zeichenfolge falsch ist. "PS: Sie können 'Definiertheit' jedoch nicht auf nicht vorhandene Variablen testen" - Sicher können Sie :typeof HellowWorld === 'undefined'
.Variablen in Javascript haben keinen Typ. Nicht Null, nicht Null, nicht leer und
true
sind "wahr". Null, null, undefiniert, leere Zeichenfolge undfalse
sind "falsch".Es gibt jedoch einen booleschen Typ, ebenso wie Literale
true
undfalse
.quelle
2 + 2
vs gezeigt werden kann"2" + 2
. Siehe auch dentypeof
Operator .Wie wäre es mit so etwas:
Dann können Sie es so verwenden:
Ich habe es nicht auf Leistung getestet, aber die Konvertierung von Typ zu Typ sollte nicht zu oft erfolgen, sonst öffnen Sie Ihre App bis zur Instabilität!
quelle
Die Variable wird zu dem Typ, den Sie ihr zuweisen. Anfangs ist es so
undefined
. Wenn Sie es zuweisen, wird'true'
es zu einer Zeichenfolge, wenn Sie es zuweisen, wirdtrue
es zu einem Booleschen Wert. Wenn Sie es zuweisen, wird1
es zu einer Zahl. Nachfolgende Zuweisungen können den Typ der Variablen später ändern.quelle