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 语句问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?

JavaScript逻辑运算符 三元表达式

三元运算文件操作

python-三元运算

用三元运算符整理 javascript

用于方法调用的 Javascript 三元运算符