2012-02-24 14 views
20

tengo este código:Javascript: utilizar una variable, o si es indefinido, una cadena predeterminada

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

Se llama así:

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

Lo que quiero hacer es usar una frase predeterminada cuando la variable no está definida, pero cuando paso una variable indefinida a phrase(), JS arroja un error variable indefinido. ¿Cómo puedo solucionar esto? ¿Alguna otra idea para hacer esto?

+0

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

+0

¿Qué navegador (s) muestra (n) este problema? Ver [este jsfiddle] (http://jsfiddle.net/CBG2f/), que funciona en FF10 para mí muy bien. – Jeroen

Respuesta

47

No necesita una función. El operador || se utiliza generalmente:

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

Se puede ver || como:

someValue || defaultValue 

Para cadenas, defaultValue se utiliza si someValue === "".

Si la variable no está definida en absoluto, necesitará alinear la verificación typeof x === "undefined", porque no puede pasar la variable a una función (es decir, ReferenceError).

+0

incorrecto si algunaValor = 0 en lugar de ser indefinido, se usará defaultValue. – Jerry

0

Normalmente codificaría esto como title: js_shutdown || 'Shutdown' en ausencia de posibles problemas de seguridad.

1

Uso del logical OR operator:

var phrase = variable || defaultPhrase; 

o en línea:

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

en JavaScript, normalmente se utiliza el operador OR || para proporcionar un valor alternativo cuando no está definida una variable:

return variable || defaultPhrase || '' 

En el caso variable es indefinido d, se evaluará como falso, luego se evaluará la segunda parte de la prueba; si tampoco está definida, aún se puede devolver una cadena vacía.

+1

No, 'null' y' 0' también fallan con este operador. – zjeraar

2

Es un error de javascript hacer referencia a una variable indefinida sin ámbito en su llamada de función. Por lo tanto, si la variable js_shutdown no existe en su alcance, entonces esto:

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

es un error.

Por ejemplo, este código provoca un error en la línea que llama a la función 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')});​ 

debido a que el motor de JavaScript no es capaz de encontrar js_shutdown en cualquier ámbito.

embargo, esto está bien:

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

Se puede ver que esto funciona aquí: http://jsfiddle.net/jfriend00/JFz6R/

Debido a que usted ha dicho que el motor JS exactamente dónde buscar js_shutdown y cuando no lo es allí, simplemente pasa indefinido a la función de frase (como desee).

-1

¿No debería ser:

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

por lo general utilizando || es suficiente, al igual que otros han sugerido. Sin embargo, si desea tener 0, falso y nulo como valores aceptables, entonces de hecho necesita verificar si el tipo de la variable no está definido. Se puede utilizar el operador ternario para que sea una sola línea:

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