【问题标题】: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,因为如果该值存在,则您无需更改任何内容。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-11-19
              • 2017-05-30
              • 2021-07-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-07
              相关资源
              最近更新 更多