Ich weiß, dass ich auf eine Javascript-Variable testen und sie dann definieren kann, wenn sie nicht definiert ist, aber es gibt keine Möglichkeit zu sagen
var setVariable = localStorage.getItem ('Wert') || 0;
scheint ein viel klarerer Weg zu sein, und ich bin mir ziemlich sicher, dass ich das in anderen Sprachen gesehen habe.
javascript
undefined
Pedalpete
quelle
quelle
localStorage.getItem()
eine Ausnahmetry...catch
Antworten:
Ja, das kann es, aber genau genommen wird der Standardwert zugewiesen , wenn der abgerufene Wert falsch ist , im Gegensatz zu wirklich undefiniert . Es wäre daher nicht nur entsprechen ,
undefined
sondern auchnull
,false
,0
,NaN
,""
(aber nicht"0"
).Wenn Sie nur dann die Standardeinstellung festlegen möchten, wenn die Variable streng
undefined
ist, schreiben Sie am sichersten:In neueren Browsern ist es tatsächlich sicher zu schreiben:
Beachten Sie jedoch, dass dies in älteren Browsern möglich ist, in denen eine Variable
undefined
mit einem definierten Wert deklariert werden durfte, wodurch der Test fehlschlug.quelle
var x = (x === undefined ? def_val : x);
als etwas längervar x = (typeof x === 'undefined') ? def_val : x;
. Unterscheidet sich das Verhalten?undefined
eine Neudefinition durchgeführt werden, wodurch der Gleichheitstest fehlschlug.||
Ansatz nicht in einem strengen Test für undefiniert verwenden, Sie müssen einen expliziten Test fürundefined
mit einer Bedingung verwenden.Die ES6-Antwort für 2018 lautet :
Wenn die Variable x undefiniert ist, geben Sie die Variable y zurück. Wenn die Variable x definiert ist, geben Sie die Variable x zurück.
quelle
Object.is
ist es nicht besser als===
in diesem Fall. "Der Operator === (und auch der Operator ==) behandelt die Zahlenwerte -0 und +0 als gleich und Number.NaN als ungleich NaN." ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Hier spielt es keine Rolle.Object.is
diese Option insbesondere, wenn beide Operanden möglicherweise vorhanden sindNaN
.undefined
. Funktioniert also===
100% der Zeit, nicht nur 98%. Der Vorteil,===
dass es leichter zu lesen ist, insbesondere auf einen Blick, kürzer und ein unnötiger Methodenaufruf vermieden wird. Persönlich würde ich nur verwenden,Object.is()
wenn die Situation es erfordert und===
in allen anderen Fällen bevorzugen .Ich musste an mehreren Stellen "eine Variable setzen, wenn sie nicht definiert ist". Ich habe eine Funktion mit der Antwort von @Alnitak erstellt. Hoffentlich hilft es jemandem.
Verwendung:
quelle
Es scheint logischer zu überprüfen,
typeof
anstattundefined
? Ich gehe davon aus, dass Sie eine Zahl erwarten,0
wenn Sie die Variable auf undefiniert setzen:In diesem Fall
getVariable
wird setVariable auf gesetzt, wenn es sich nicht um eine Zahl (Zeichenfolge, Objekt, was auch immer) handelt0
quelle
ES2020 Antwort
Mit dem Nullish Coalescing Operator können Sie einen Standardwert festlegen , wenn dieser
value
null oder undefiniert ist.Beachten Sie jedoch, dass der nullish coalescing-Operator den Standardwert für andere Arten von Falschwerten wie
0
und nicht zurückgibt''
.Beachten Sie, dass die Browserunterstützung für den Bediener begrenzt ist. Nach Angaben von caniuse werden nur 48,34% der Browser unterstützt (Stand April 2020). Die Unterstützung von Node.j wurde in Version 14 hinzugefügt .
quelle
Wenn Sie ein FP- Fan ( Functional Programming ) sind, hat Ramda eine nette Hilfsfunktion für diese Funktion namens defaultTo :
Verwendung:
const result = defaultTo(30)(value)
Es ist nützlicher, wenn es um
undefined
boolesche Werte geht:const result2 = defaultTo(false)(dashboard.someValue)
quelle
const result = value || 30;
, außer dass eine Zwischenfunktion und +1000 Bytes lib verwendet werdenvar setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;
quelle
localStorage.getItem('value'))
zurückkehrtfalse
Ich bin auch heute auf dieses Szenario gestoßen, in dem ich nicht wollte, dass Null für mehrere Werte überschrieben wird. Wir haben eine Datei mit einigen gängigen Dienstprogrammmethoden für solche Szenarien. Folgendes habe ich hinzugefügt, um das Szenario zu handhaben und flexibel zu sein.
Es kann dann aufgerufen werden, wobei die letzten beiden Parameter optional sind, wenn ich nur undefinierte Werte festlegen oder auch Null- oder 0-Werte überschreiben möchte. Hier ist ein Beispiel für einen Aufruf, bei dem die ID auf -1 gesetzt wird, wenn die ID undefiniert oder null ist, ein 0-Wert jedoch nicht überschrieben wird.
quelle
In unseren Tagen können Sie Ihren Ansatz tatsächlich mit JS machen:
Ihr Beispiel wird also funktionieren:
quelle
Funktioniert auch, wenn der Standardwert ein boolescher Wert ist:
quelle
Es scheint mir, dass für aktuelle Javascript-Implementierungen,
ist eine gute Möglichkeit, dies zu tun (mithilfe der Objektdekonstruktion).
quelle
Logische Nullzuweisung, ES2020 + -Lösung
Neue Betreiber werden derzeit in den Browsern hinzugefügt werden,
??=
,||=
, und&&=
. Dieser Beitrag wird sich auf konzentrieren??=
.Dies prüft, ob die linke Seite undefiniert oder null ist, und schließt kurz, falls bereits definiert. Wenn nicht, wird die rechte Seite der linken Variablen zugewiesen.
Methoden vergleichen
Grundlegende Beispiele
Objekt- / Array-Beispiele
?? = Browser-Unterstützung Juli 2020 - .03%
?? = Mozilla-Dokumentation
|| = Mozilla-Dokumentation
&& = Mozilla-Dokumentation
quelle