JavaScript三元运算符转换为完整的if / else语句问题

时间:2012-01-12 09:40:10

标签: javascript jquery if-statement ternary-operator

我有以下三元声明:

$.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 == "")上的错误,但我不明白是什么错误 任何建议都非常感谢。

5 个答案:

答案 0 :(得分:6)

在JavaScript中,if 不是表达式。它不返回值,也不能放入函数调用中。也就是说,这是无效的:

func(if (a) { ... } else { ... });

这是if?:之间的主要区别 - 运算符是一个表达式并返回一个值; if是一个声明,返回一个值,不能在任何地方使用。

如果你必须避免使用三元运算符,最好的办法就是:

if (url == "") {
  url = "#some-page";
} 

load(url);

使用||

也可以达到同样的效果
function (url) {
  load(url || "#some-page");
}

这是编写代码的最短且最惯用的方法。

答案 1 :(得分:1)

if表达式在JS中不返回任何内容。所以这基本上是load(undefined)

请改为尝试:

if (url === '') {
  url = '#some-page';
}

load(url);

请注意,根本不需要else,因为如果值存在,则无需更改。

答案 2 :(得分:0)

将其重写为

$.history.init(function(url) {
        if( url == ""){ 
           url = "#some-page";
         }
         load( url );
 });

答案 3 :(得分:0)

您的重写代码无效。试试这个:

$.history.init(function(url) {
      if(url == "") {
         load("#some-page");
      } else {
         load(url);
      }
});

答案 4 :(得分:0)

您需要if语句超出load函数,即

$.history.init(function(url) {
    if (url === "") { 
        url = "#some-page";
    }
    load(url);
});

请注意,您不需要else子句,因为url = url是一项冗余操作。