So erhalten Sie einen Wert von Object mit dem Standardwert

Lesezeit: 4 Minuten

Benutzer-Avatar
Jeremy S.

Ich übergebe ständig Konfigurationswerte an Funktionen, die wie folgt darauf zugreifen:

var arg1 = 'test1';
if(isUndefined(config.args.arg1)){
  arg1 = config.args.arg1;
} 

var arg2 = 'param2';
if(isUndefined(config.args.arg2)){
  arg2 = config.args.arg2;
} 

var arg3 = '123';
if(isUndefined(config.args.arg3)){
  arg3 = config.args.arg3;
} 

wo ich sie später so verwende:

var url="<some-url>?id="+arg1+'&='+arg2 +'=' + arg3;

Bietet jQuery/ExtJS oder ein anderes Framework eine Lösung, um auf einfache Weise auf solche Variablen zuzugreifen und Variablen einen Standardwert zuzuweisen?

Etwas wie:

getValueOfObject(config,'args.arg3','<default>');

Oder gibt es dafür vielleicht eine Standardlösung.

HINWEIS:

Ich habe auch über das allgemeine Muster nachgedacht, bei dem Sie Standardwerte haben

var defaults = {
   args: {
      args1: ....
   }
   ...
}

und eine Objektzusammenführung durchführen.

Und dann das Objekt in einen Param-String codieren. Aber wie Sie das Objekt sehen können Werte enthalten manchmal auch Parameternamen.

Benutzer-Avatar
karim79

Im Allgemeinen kann man die verwenden oder Betreiber So weisen Sie einen Standardwert zu, wenn eine Variable als falsch ausgewertet wird:

var foo = couldBeUndefined || "some default";

Also:

var arg1 = config.args.arg1 || "test";
var arg2 = config.args.arg2 || "param2";

vorausgesetzt, dass config.args ist immer definiert, wie Ihr Beispielcode andeutet.

  • Ich glaube, es wird in Ordnung sein, wenn config.args.arg1 ist undefiniert, aber wird dies nicht fehlschlagen, wenn config oder config.args ist selbst undefiniert?

    – James Weisemann

    25. Januar 2012 um 14:14 Uhr


  • @karim79 meint er config.args.arg1 wird werfen, wenn config.args === undefined

    – Raynos

    25. Januar 2012 um 14:16 Uhr

  • Hier gibt es einen großen Fehler. Wenn couldBeUndefined = 0oder irgendein anderer falscher Wert, dann foo = "some default"anstatt das Gewünschte zu bekommen foo = 0

    – Daniel Reina

    16. Juni 2017 um 0:27 Uhr

  • Dies schlägt fehl, wenn der Wert falsch ist. Du solltest tun typeof x.y != 'undefined' ? x.y : "";

    – 7H3 IN5ID3R

    2. August 2017 um 18:45 Uhr


  • Wenn arg boolesch und der Standardwert wahr ist, ist alles ruiniert.

    – KIDJourney

    7. August 2017 um 2:10 Uhr

Benutzer-Avatar
Timur Osadchiy

Mit ECMAScript 2020 ist die Verwendung möglicherweise sicherer Nullish-Koaleszenzoperator als or Operator.

let foo = obj.maybeUndefined ?? "default value";

JS behandelt 0, -0, null, false, NaN, undefined oder die leere Zeichenfolge (“”) als falsy. Also verwenden or -Operator zum Festlegen eines Standardwerts im folgenden Beispiel kann zu unerwarteten Ergebnissen führen

let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined || 1; // foo == 1

Hier, foo gleich wird 1Wenn maybeUndefined eigentlich definiert ist. Wenn foo sollte nur dann ein Standardwert zugewiesen werden, wenn maybeUndefined ist eigentlich undefined oder nulldann können wir verwenden Nullish-Koaleszenzoperator.

let obj = { maybeUndefined: 0 };
let foo = obj.maybeUndefined ?? 1; // foo == 0

let obj = {};
let foo = obj.maybeUndefined ?? 1; // foo == 1

Sieht aus wie endlich Lodash hat die _.erhalten() Funktion dafür!

Mit ES2018 können Sie jetzt schreiben options = { ...defaults, ...options }:

Spread-Syntax – JavaScript | MDN

Das flache Klonen (mit Ausnahme von Prototypen) oder das Zusammenführen von Objekten ist jetzt mit einer kürzeren Syntax als möglich Object.assign().

const obj1 = { foo: 'bar', x: 42 };
const obj2 = { foo: 'baz', y: 13 };

const clonedObj = { ...obj1 };
// Object { foo: "bar", x: 42 }

const mergedObj = { ...obj1, ...obj2 };
// Object { foo: "baz", x: 42, y: 13 }

Benutzer-Avatar
Raynos

Versuchen var options = extend(defaults, userOptions);

Auf diese Weise erhalten Sie alle userOptions und greifen auf die Standardwerte zurück, wenn sie keine Optionen übergeben.

Beachten Sie, dass Sie alle verwenden extend gewünschte Umsetzung.

  • extend ändert normalerweise sein erstes Argument und gibt es zurück. Dies bedeutet, dass Sie normalerweise möchten extend({}, defaults, userOptions)damit die Standardeinstellungen nicht geändert werden.

    – Michael Anderson

    23. Mai 2013 um 8:41 Uhr

  • Ihre Version von extend mag unveränderlich sein, aber alle anderen Versionen, auf die ich gestoßen bin, einschließlich der Versionen von jQuery (api.jquery.com/jQuery.extend), Lodash und Unterstrich (underscorejs.org/#extend) verwenden alle die nicht unveränderliche Form.

    – Michael Anderson

    27. Mai 2013 um 0:37 Uhr

  • Hinweis: Es gibt auch die Verknüpfung _.defaults genau zu diesem zweck.

    – sk29910

    24. Oktober 2015 um 18:47 Uhr

  • extend ändert normalerweise sein erstes Argument und gibt es zurück. Dies bedeutet, dass Sie normalerweise möchten extend({}, defaults, userOptions)damit die Standardeinstellungen nicht geändert werden.

    – Michael Anderson

    23. Mai 2013 um 8:41 Uhr

  • Ihre Version von extend mag unveränderlich sein, aber alle anderen Versionen, auf die ich gestoßen bin, einschließlich der Versionen von jQuery (api.jquery.com/jQuery.extend), Lodash und Unterstrich (underscorejs.org/#extend) verwenden alle die nicht unveränderliche Form.

    – Michael Anderson

    27. Mai 2013 um 0:37 Uhr

  • Hinweis: Es gibt auch die Verknüpfung _.defaults genau zu diesem zweck.

    – sk29910

    24. Oktober 2015 um 18:47 Uhr

1187390cookie-checkSo erhalten Sie einen Wert von Object mit dem Standardwert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy