it-swarm.com.de

javascript setzt eine Variable, wenn undefiniert

Ich weiß, dass ich auf eine Javascript-Variable testen kann und diese dann definieren kann, wenn sie undefiniert ist, aber gibt es keine Möglichkeit zu sagen

 var setVariable = localStorage.getItem ('value') || 0; 

scheint ein viel klarerer Weg zu sein, und ich bin mir ziemlich sicher, dass ich das in anderen Sprachen gesehen habe. 

142
pedalpete

Ja, das ist möglich, aber streng genommen wird der Standardwert zugewiesen, wenn der abgerufene Wert falsey ist, im Gegensatz zu true undefined . Es würde daher nicht nur mit undefined, sondern auch mit null, false, 0, NaN, "" (aber nicht "0") übereinstimmen.

Wenn Sie nur auf default setzen möchten, wenn die Variable streng undefined ist, schreiben Sie am sichersten:

var x = (typeof x === 'undefined') ? def_val : x;

Auf neueren Browsern ist es eigentlich sicher zu schreiben:

var x = (x === undefined) ? def_val : x;

beachten Sie jedoch, dass dies bei älteren Browsern möglich ist, in denen eine Variable mit dem Namen undefined mit einem definierten Wert deklariert werden konnte, wodurch der Test fehlschlägt.

273
Alnitak

Die 2018 ES6 Antwort ist :

return Object.is(x, undefined) ? y : x;

Wenn die Variable x nicht definiert ist, geben Sie die Variable y zurück. Andernfalls, wenn die Variable x definiert ist, geben Sie die Variable x zurück.

22
Sterling Bourne

Ich musste an verschiedenen Stellen "eine Variable setzen, wenn undefiniert". Ich habe eine Funktion mit @Alnitak answer erstellt. Hoffentlich hilft es jemandem.

function setDefaultVal(value, defaultValue){
   return (value === undefined) ? defaultValue : value;
}  

Verwendungszweck:

hasPoints = setDefaultVal(this.hasPoints, true);
5
Mcestone

Es erscheint logischer, typeof anstelle von undefined zu überprüfen. Ich gehe davon aus, dass Sie eine Zahl erwarten, wenn Sie die Variable auf 0 setzen, wenn undefined:

var getVariable = localStorage.getItem('value');
var setVariable = (typeof getVariable == 'number') ? getVariable : 0;

Wenn getVariable keine Zahl ist (String, Objekt oder was auch immer), wird setVariable auf 0 gesetzt. 

5
Bruno

var setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;

1
Zikes

Wenn Sie ein FP Fan sind, hat Ramda eine nette Hilfsfunktion, die defaultTo heißt:

verwendungszweck:

const result = defaultTo(30)(value)

Dies ist nützlicher, wenn Sie mit undefined Booleschen Werten arbeiten:

const result2 = defaultTo(false)(dashboard.someValue)

1
Damian Green

Heute bin ich auch in dieses Szenario geraten, bei dem ich nicht wollte, dass Null für mehrere Werte überschrieben wird. Wir haben eine Datei mit einigen gängigen Hilfsmethoden für Szenarien wie diese. Folgendes habe ich hinzugefügt, um das Szenario zu handhaben und flexibel zu sein.

function getIfNotSet(value, newValue, overwriteNull, overwriteZero) {
    if (typeof (value) === 'undefined') {
        return newValue;
    } else if (value === null && overwriteNull === true) {
        return newValue;
    } else if (value === 0 && overwriteZero === true) {
        return newValue;
    } else {
        return value;
    }
}

Es kann dann mit den letzten beiden Parametern aufgerufen werden, wenn ich nur für undefinierte Werte festlegen oder auch Null- oder 0-Werte überschreiben möchte. Hier ein Beispiel für einen Aufruf, bei dem die ID auf -1 gesetzt wird, wenn die ID nicht definiert oder null ist, aber keinen Wert 0 überschreibt.

data.ID = Util.getIfNotSet(data.ID, -1, true);
0
Mark Seefeldt

Es scheint mir, dass für aktuelle Javascript-Implementierungen,

var [result='default']=[possiblyUndefinedValue]

ist ein guter Weg, um dies zu tun (mit Objekt Dekonstruktion).

0
T S

Funktioniert auch, wenn der Standardwert ein boolescher Wert ist:

var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );
0
Tsz Lam Yau