繁体   English   中英

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

[英]JavaScript ternary operator into full if/else statement issue

我有以下三元声明:

$.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中, if 不是表达式。 它不返回值,也不能放入函数调用中。 也就是说,这是无效的:

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

这是if?:之间的主要区别?: - 运算符是一个表达式并返回一个值; if是一个语句, 返回值,并不能随处使用。

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

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

load(url);

您也可以使用||实现相同的效果

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

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

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

试试这个:

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

load(url);

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

将其重写为

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

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

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

您需要if语句在load函数之外,即

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM