JavaScript 三元运算符变成完整的 if/else 语句问题
Posted
技术标签:
【中文标题】JavaScript 三元运算符变成完整的 if/else 语句问题【英文标题】:JavaScript ternary operator into full if/else statement issue 【发布时间】: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 == "")
的错误,但我不明白是什么错误。
任何建议都非常感谢。
【问题讨论】:
【参考方案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
,因为如果该值存在,则您无需更改任何内容。
【讨论】:
以上是关于JavaScript 三元运算符变成完整的 if/else 语句问题的主要内容,如果未能解决你的问题,请参考以下文章