2012-01-12 59 views
3

我有以下三元声明:的JavaScript三元运算充分if/else语句的问题

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

回答

6

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

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

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

你最好的,如果你必须避免三元运算符的办法是做这样的事情:

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

load(url); 

您也可以使用||达到同样的效果:

function (url) { 
    load(url || "#some-page"); 
} 

这是最短的,并大多数惯用的方式来编写你的代码。

0

重写它作为

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

你重写代码无效。试试这个:

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

您需要if声明是load功能之外,即

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

请注意,您不需要else子句url = url是多余的操作。

1

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

试试这个:

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

load(url); 

注意你不需要else可言,因为如果该值是目前你有什么改变。