it-swarm.com.de

Javascript: Verwenden Sie entweder eine Variable oder, falls diese nicht definiert ist, eine Standardzeichenfolge

Ich habe diesen Code:

var phrase = function (variable, defaultPhrase) {
    if (typeof variable === "undefined") {
        return defaultPhrase;
    }
    else {
        return variable;
    }
}

Es heißt so:

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //...

Ich möchte eine Standardphrase verwenden, wenn die Variable nicht definiert ist, aber wenn ich eine undefinierte Variable an phrase() übergeben, wirft JS einen undefined Variablenfehler. Wie kann ich das beheben? Weitere Ideen, dies zu tun?

26
hardmax

Du brauchst keine Funktion. Der ||-Operator wird normalerweise verwendet:

Ext.Msg.show({ title: js_shutdown || 'Shutdown', //...

Sie können || sehen als:

someValue || defaultValue

Für Zeichenfolgen wird defaultValue verwendet, wenn someValue === "".

Wenn die Variable überhaupt nicht definiert ist, müssen Sie die Überprüfung typeof x === "undefined" inline einbetten, da Sie die Variable nicht an eine Funktion übergeben können (das ist eine ReferenceError).

57
pimvdb

Normalerweise reicht || aus, wie von anderen vorgeschlagen. Wenn Sie jedoch 0, Falsch und Null als akzeptable Werte haben möchten, müssen Sie in der Tat prüfen, ob der Typ der Variablen undefiniert ist. Sie können den ternären Operator verwenden, um daraus einen Einzeiler zu machen:

var variable;
var defaultPhrase = "Default";
var phrase = (typeof variable === "undefined" ? defaultPhrase : variable);
console.log(phrase);
// => "Default"
13
Weetu

Es ist ein Javascript-Fehler, auf eine undefinierte Variable ohne Funktionsumfang in Ihrem Funktionsaufruf zu verweisen. Wenn also die Variable js_shutdown nicht im Gültigkeitsbereich vorhanden ist, gilt Folgendes:

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //...

ist ein fehler.

Dieser Code verursacht beispielsweise einen Fehler in der Zeile, in der die Funktion phrase() aufgerufen wird:

var Ext = {};
Ext.Msg = {};
Ext.Msg.show = function() {console.log("success")};

function phrase(variable, defaultPhrase) {
    return(variable || defaultPhrase);
}

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown')});​

weil das Javascript-Modul js_shutdown in keinem Bereich finden kann.

Aber das ist OK:

var Ext = {};
Ext.Msg = {};
Ext.Msg.show = function() {console.log("success")};

function phrase(variable, defaultPhrase) {
    return(variable || defaultPhrase);
}

Ext.Msg.show({title: phrase(window.js_shutdown,'Shutdown')});​

Sie können sehen, dass dies hier funktioniert: http://jsfiddle.net/jfriend00/JFz6R/

Da Sie der JS-Engine genau gesagt haben, wo sie nach js_shutdown suchen müssen, und wenn dies nicht der Fall ist, wird sie nur undefined an die Phrasenfunktion übergeben (wie Sie möchten).

4
jfriend00

In Javascript verwenden Sie normalerweise den Operator OR ||, um einen alternativen Wert anzugeben, wenn eine Variable nicht definiert ist:

return variable || defaultPhrase || ''

Falls variable nicht definiert ist, wird dies als "false" ausgewertet. Dann wird der zweite Teil des Tests ausgewertet. Wenn er nicht definiert ist, können Sie noch eine leere Zeichenfolge zurückgeben.

2
Didier Ghys

Verwenden Sie den logischen OR Operator :

 var phrase = variable || defaultPhrase;

Oder inline:

Ext.Msg.show({title: (js_shutdown || 'Shutdown')), //...
1
James Hill

Ich würde diesen Code normalerweise wie title: js_shutdown || 'Shutdown' codieren, wenn keine möglichen Sicherheitsprobleme auftreten.

0
ninjagecko