web-dev-qa-db-fra.com

Javascript: utilisez une variable ou, si elle n'est pas définie, une chaîne par défaut

J'ai ce code:

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

Ça s'appelle comme ça:

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

Ce que je veux faire est d'utiliser une phrase par défaut lorsque la variable n'est pas définie, mais lorsque je passe une variable non définie à phrase(), JS génère une erreur de variable non définie. Comment puis-je réparer ça? D'autres idées pour faire ça?

26
hardmax

Vous n'avez pas besoin d'une fonction. L'opérateur || est généralement utilisé:

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

Vous pouvez voir || comme:

someValue || defaultValue

Pour les chaînes, defaultValue est utilisé si someValue === "".

Si la variable n'est pas du tout définie, vous devez insérer la vérification typeof x === "undefined" dans la ligne, car vous ne pouvez pas transmettre la variable à une fonction (c'est un ReferenceError).

57
pimvdb

Habituellement, utiliser || suffit, comme d'autres l'ont suggéré. Cependant, si vous voulez avoir 0, false et null comme valeurs acceptables, vous devez alors vérifier si le type de la variable est indéfini. Vous pouvez utiliser l'opérateur ternaire pour en faire une ligne:

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

C’est une erreur javascript de faire référence à une variable non définie sans portée dans votre appel de fonction. Donc, si la variable js_shutdown n’existe pas dans la portée, alors ceci:

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

est une erreur.

Par exemple, ce code provoque une erreur sur la ligne qui appelle la fonction phrase():

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')});​

car le moteur javascript n'est pas en mesure de trouver js_shutdown dans aucune étendue.

Mais c'est 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')});​

Vous pouvez voir que cela fonctionne ici: http://jsfiddle.net/jfriend00/JFz6R/

Parce que vous avez indiqué exactement au moteur JS où chercher js_shutdown, il passe simplement non défini à la fonction phrase (comme vous le souhaitez).

4
jfriend00

En javascript, vous utilisez généralement l'opérateur OR || pour fournir une valeur alternative lorsqu'une variable n'est pas définie:

return variable || defaultPhrase || ''

Si variable n'est pas défini, sa valeur sera false, la deuxième partie du test sera évaluée. S'il est également indéfini, vous pouvez toujours renvoyer une chaîne vide.

2
Didier Ghys

Utilisez l'opérateur logique OR :

 var phrase = variable || defaultPhrase;

Ou en ligne:

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

Je coderais généralement ceci comme title: js_shutdown || 'Shutdown' en l'absence de problèmes de sécurité possibles.

0
ninjagecko