Javascript:使用变量,或者如果它's未定义,为默认字符串

Javascript: use either a variable, or if it's undefined, a default string

本文关键字:未定义 字符串 默认 变量 如果 或者 Javascript      更新时间:2023-09-26

我有这个代码:

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

它的名字是这样的:

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

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

您不需要函数。通常使用||运算符:

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

您可以将||看作:

someValue || defaultValue

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

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

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

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

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

return variable || defaultPhrase || ''

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

在函数调用中引用没有作用域的未定义变量是一个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引擎无法在任何范围内找到jsshutdown。

但是,这还可以:

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传递给短语函数(根据您的需要)。

使用逻辑OR运算符:

 var phrase = variable || defaultPhrase;

或内联:

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

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

不应该是:吗

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