Javascript:使用变量,或者如果它's未定义,为默认字符串
Javascript: use either a variable, or if it's undefined, a default string
我有这个代码:
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;
}
}
- 拆分字符串数组(JavaScript)后未定义
- 无法获取属性'字符串'的未定义或null引用IE 11 ASP.NET
- jqueryajax生成查询字符串,如果未定义则不通过
- 传递给Angular2组件的字符串始终未定义
- 返回List<字符串>Jquery中的from JSON调用具有未定义的长度
- 解析JSON字符串返回未定义的结果
- 具有null或未定义值的JavaScript字符串串联行为
- 查找任何未定义的变量并从url字符串中隐藏
- JavaScript函数中未定义字符串
- 使用$se.trustAsHtml呈现字符串返回未定义的结果
- 调用.ajax方法得到未定义的json结果,返回json格式列表<字符串>
- 使用jQuery'在数组中循环;s中的每一个都会在生成字符串时在开头产生一个未定义的值
- JSON对象在控制台中显示对象,但也包含来自php脚本返回的字符串的“未定义”
- 从 JSON 字符串创建的 knockoutjs observableArray 中的未定义(额外)对象
- 返回未定义的 JavaScript 字符串长度
- 将字符串拆分为两个变量 - 未定义不是一个函数
- 字符串类型错误: 变量未定义
- 带有base64的回形针:#<字符串:0xb46dba14>的未定义方法“stringify_keys”
- extjs:无法读取未定义的属性“子字符串”
- 数组中的字符串显示为未定义,尽管在几行之前成功.log控制台