Javascript:使用变量,或者如果未定义,则使用默认字符串

时间:2012-02-24 13:51:18

标签: javascript function variables undefined

我有这段代码:

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

它被称为:

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

我想要做的是在未定义变量时使用默认短语,但是当我将未定义的变量传递给phrase()时,JS会抛出未定义的变量错误。我该如何解决?还有其他想法吗?

7 个答案:

答案 0 :(得分:58)

您不需要功能。通常使用||运算符:

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

您可以将||视为:

someValue || defaultValue

对于字符串,如果defaultValue使用someValue === ""

如果根本没有定义变量,则需要内联typeof x === "undefined"检查,因为您无法将变量传递给函数(即ReferenceError)。

答案 1 :(得分:13)

通常使用||就足够了,就像其他人所建议的那样。但是,如果要将0,false和null作为可接受的值,那么确实需要检查变量的类型是否未定义。您可以使用三元运算符使其成为单行:

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

答案 2 :(得分:4)

在函数调用中引用未定义的未定义变量是一个javascript错误。因此,如果范围中不存在变量js_shutdown,那么:

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

是一个错误。

例如,此代码会在调用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')});​

因为javascript引擎无法在任何范围内找到js_shutdown。

但是,这没关系:

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

您可以在此处看到:http://jsfiddle.net/jfriend00/JFz6R/

因为你已经告诉JS引擎到底在哪里寻找js_shutdown,当它不存在时,它只是将undefined传递给短语函数(如你所愿)。

答案 3 :(得分:2)

在javascript中,通常使用OR运算符||在未定义变量时提供替代值:

return variable || defaultPhrase || ''

如果variable未定义,它将评估为false,然后将评估测试的第二部分,如果它也未定义,您仍然可以返回一个空字符串。

答案 4 :(得分:1)

使用logical OR operator

 var phrase = variable || defaultPhrase;

或内联:

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

答案 5 :(得分:0)

在没有可能的安全问题的情况下,我通常会像title: js_shutdown || 'Shutdown'那样编码。

答案 6 :(得分:-1)

不应该是:

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