2012-02-24 13 views
20

ho questo codice:Javascript: utilizzare una variabile, o se è indefinita, una stringa di default

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

Si chiama così:

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

Quello che voglio fare è quello di utilizzare una frase predefinita quando la variabile non è definita, ma quando passo una variabile non definita a phrase(), JS genera un errore variabile non definito. Come posso risolvere questo? Qualche altra idea per fare questo?

+0

vedere questo: http://stackoverflow.com/questions/894860/how-do-i-make-a-default-value-for -a-parameter-to-a-a-javascript-function – westmark

+0

Quale browser/quali sono/stanno mostrando questo problema? Vedi [questo jsfiddle] (http://jsfiddle.net/CBG2f/), che funziona per me in FF10. – Jeroen

risposta

47

Non è necessaria una funzione. L'operatore || è di solito usato:

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

Si può vedere come ||:

someValue || defaultValue 

Per le stringhe, defaultValue viene utilizzato se someValue === "".

Se la variabile non è stata definita, è necessario allineare il controllo typeof x === "undefined", poiché non è possibile passare la variabile a una funzione (ovvero ReferenceError).

+0

Sbagliato. se someValue = 0 invece di essere indefinito, verrà utilizzato DefaultValue. – Jerry

0

Normalmente vorrei codificare questo come title: js_shutdown || 'Shutdown' in assenza di possibili problemi di sicurezza.

1

Utilizzare la logical OR operator:

var phrase = variable || defaultPhrase; 

o inline:

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

in JavaScript, in genere si utilizza l'operatore OR || per fornire un valore alternativo quando non è definita una variabile:

return variable || defaultPhrase || '' 

Nel caso variable è undefine d, verrà valutato su false, quindi verrà valutata la seconda parte del test, se non è definita, è ancora possibile restituire una stringa vuota.

+1

No, anche 'null' e' 0' vengono visualizzati con questo operatore. – zjeraar

2

È un errore javascript per fare riferimento a una variabile non definita senza ambito nella chiamata di funzione. Quindi, se la variabile js_shutdown non esiste nel campo di applicazione, allora questo:

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

è un errore.

Ad esempio, questo codice causa un errore sulla linea che chiama la funzione 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')});​ 

perché il motore JavaScript non è in grado di trovare js_shutdown in qualsiasi ambito.

Ma, questo è 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')});​ 

Si può vedere che questo funziona qui: http://jsfiddle.net/jfriend00/JFz6R/

Perché tu hai detto il motore JS esattamente dove cercare js_shutdown e quando non lo è lì, passa semplicemente indefinito alla funzione frase (come vuoi).

-1

non dovrebbe essere:

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

solito utilizzando || è sufficiente, come altri hanno suggerito. Tuttavia, se si desidera avere valori 0, false e null come valori accettabili, è necessario verificare se il tipo di variabile non è definito. È possibile utilizzare l'operatore ternario per renderlo una battuta:

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