函数内部的JavaScript if语句以避免除以零NaN结果?

Posted

技术标签:

【中文标题】函数内部的JavaScript if语句以避免除以零NaN结果?【英文标题】:JavaScript if-statement inside function to avoid division by zero NaN result? 【发布时间】:2019-05-07 00:04:00 【问题描述】:

我在一个函数中有这个,问题是其中一个变量可能是 0,我们都知道一个不能除以 0。

                    html += ('<div class="portlet banner-port" style="border-color: #2d0059;" class="panel-collapse collapse"> \
                            <div class="portlet-heading" style="background: linear-gradient(to right, rgba(0, 0, 0, 0.40) 0%, rgba(0, 0, 0, 0) 100%), #2d0059;"> \
                                <div class="portlet-title" style="color:#ffffff;"> \
                                    <h4> \
                                    <i class="fa fa-link fa-fw"></i> '+jstext.language.custom_direct_link+' <span style="float:right"><span>'+jstext.language.custom_raw_visits+': '+resp.link.hits+'</span> <span>'+jstext.language.custom_transactions+': '+resp.link.conv+'</span> <span>'+jstext.language.custom_earnings+': '+resp.link.earnings+' €</span>  <span>EPC: '+(resp.link.earnings / resp.link.hits * 100).toFixed(2)+' €</span></span> \
                                    </h4> \
                                </div> \
                                    <div class="portlet-body"><label>'+jstext.language.marketing_target_url+':</label> \
                                        <textarea style="font-weight:normal !improtant;" id="direct-link-'+resp.data.id+'" rows="1" class="form-control">'+resp.direct_url+'</textarea> \
                                    </div> \
                            </div> \
                        </div>')

因此在这种情况下,JSON 响应 resp.link.hits 可能为 0,然后 EPC 为,正如人们所期望的那样 - NaN。正如我所见,我在这里遇到了一些基本的语法问题。我在哪里声明在这部分显示 0 而不是 NaN:

<span>EPC: '+(resp.link.earnings / resp.link.hits * 100).toFixed(2)+' €</span>

我尝试了一些方法,例如:

<span>EPC: '+if( resp.link.hits === 0 )0 else (resp.link.earnings / resp.link.hits * 100).toFixed(2)+' €</span>

上面带有 if 语句的示例使整个代码无法工作。除以 0 时,我不能让它显示 0.00 而不是 NaN。有什么想法吗?任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

使用三元运算符作为

<span>EPC: ' + ( resp.link.hits === 0  ? 0 : (data.earnings / data.hits * 100).toFixed(2) + ' €</span>

【讨论】:

试过了。不工作。顺便说一句,语法是条件? exprT : exprF 不确定,但它搞砸了整个代码。在控制台中,我看到了意外的令牌 。 你在用香草js吗? 使用 jQuery。这是 DataTables init 的一部分。 更新了答案。由于有花括号,我以为您使用的是任何 JS 模板库。【参考方案2】:

您正在尝试在应该有表达式的地方使用流控制语句。

在您的代码中,if ... 不会返回 任何内容。您可以重新组织代码或将if 语句转换为三元运算符? :,如下所示:

resp.link.hits === 0 ? 0 : (data.earnings / data.hits * 100).toFixed(2)

【讨论】:

我知道,我知道。语法是条件? exprT : exprF 并且应该首先陈述真实的陈述,然后陈述错误。【参考方案3】:

试试三元运算符。语法为expression ? trueValue : falseValue

例如:

&lt;span&gt;EPC: ' resp.link.hits === 0 ? 0 : (data.earnings / data.hits * 100).toFixed(2) + ' €&lt;/span&gt;

【讨论】:

以上是关于函数内部的JavaScript if语句以避免除以零NaN结果?的主要内容,如果未能解决你的问题,请参考以下文章

将 if 语句放在 main() 或函数内部以响应用户输入是一种好习惯吗?

避免多个 if exists, else if exits 用于内部使用的不同连接的语句

深入理解javascript闭包

避免 if 语句的内联函数指针

If 语句内部和外部的 Return

C# - 具有 2 个变量的逻辑运算符 - 组合运算符以避免 if 语句