我有这段代码:
var phrase = function (variable, defaultPhrase) {
if (typeof variable === "undefined") {
return defaultPhrase;
}
else {
return variable;
}
}
它被称为:
Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //...
我想要做的是在未定义变量时使用默认短语,但是当我将未定义的变量传递给phrase()
时,JS会抛出未定义的变量错误。我该如何解决?还有其他想法吗?
答案 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)
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;
}
}