【问题标题】:JavaScript ternary operator into full if/else statement issueJavaScript 三元运算符变成完整的 if/else 语句问题
【发布时间】:2012-02-08 14:39:03
【问题描述】:
我有以下三元语句:
$.history.init(function(url) {
load(url == "" ? "#some-page" : url);
});
我已经改写成:
$.history.init(function(url) {
load(
if( url == ""){ url = "#some-page"
} else { url = url }
);
});
我现在是第 3 行 if(url == "") 的错误,但我不明白是什么错误。
任何建议都非常感谢。
【问题讨论】:
标签:
javascript
jquery
if-statement
ternary-operator
【解决方案1】:
在 JavaScript 中,if 不是 表达式。它不返回值,也不能放在函数调用中。也就是说,这是无效的:
func(if (a) { ... } else { ... });
这是if和?:的主要区别——运算符是表达式,返回值; if 是一个语句,not返回一个值,不能到处使用。
如果您必须避免使用三元运算符,最好的选择是执行以下操作:
if (url == "") {
url = "#some-page";
}
load(url);
你也可以使用||达到同样的效果:
function (url) {
load(url || "#some-page");
}
这是编写代码的最短且最惯用的方式。
【解决方案2】:
改写成
$.history.init(function(url) {
if( url == ""){
url = "#some-page";
}
load( url );
});
【解决方案3】:
您重写的代码无效。试试这个:
$.history.init(function(url) {
if(url == "") {
load("#some-page");
} else {
load(url);
}
});
【解决方案4】:
您需要if 语句位于load 函数之外,即
$.history.init(function(url) {
if (url === "") {
url = "#some-page";
}
load(url);
});
请注意,您不需要 else 子句,因为 url = url 是一个冗余操作。
【解决方案5】:
if 表达式在 JS 中不返回任何内容。所以基本上load(undefined).
试试这个:
if (url === '') {
url = '#some-page';
}
load(url);
请注意,您根本不需要 else,因为如果该值存在,则您无需更改任何内容。