【问题标题】:Getting "undefined" result when using the logical operator "&&" in a JavaScript If..Else statement在 JavaScript If..Else 语句中使用逻辑运算符“&&”时得到“未定义”结果
【发布时间】:2018-04-27 13:58:14
【问题描述】:

代码用于根据收入 (var income) 选择联邦贫困线 (var fpl) 百分比类别。当我运行这个脚本时,当我使用 && 逻辑运算符时,我的结果是“未定义”。如果我使用 || 逻辑运算符,我会得到错误且相同的答案 - “101-185%” - 无论我使用什么数字表示 var income。 p>

<p id="demo"></p>

<script>
  function FPL() {   

    var income = '4200.00';
    var fs = '1';

        var fpl;  
        if(fs == '1') {
            if(income < '1022.00')
               fpl = "0-100%";  
            if (income > '1022.00' && income < '1882.00') 
               fpl = "101-185%";   
            if (result3 > '1882.00' && income < '2033.00') 
               fpl = "186%-200%";
            if (income < '2033.00')
               fpl ="'201% & Over";

            return fpl;                

        }             

        result6 = 'Federal Poverty Level: ' + fpl;

        document.getElementById("demo").innerHTML = result6;
 }   

</script>

Else..If 语句中的逻辑运算符在 JavaScript 中的使用方式不同吗?

【问题讨论】:

  • 你没有else ...和..你的代码永远不会执行最后两个语句......如果这些条件都不为真,fpl将是未定义的......即..如果收入 >= '2033.00'
  • 另外,在使用字符串作为数字时要小心...在控制台中尝试'4200.00' &gt; '10000000000',看看你会得到什么

标签: javascript if-statement logical-operators


【解决方案1】:

首先,让我们检查一下你的代码,因为你有一些错误,我会在它们所在的位置添加 cmets。

注意:比较字符串时也要小心,例如"400" &gt; "100000" 将返回true。因此,如果要比较值,请在比较之前解析它们。

  function FPL() {   

    var income = '4200.00';
    var fs = '1';

        //set a default value here to fpl or inside an else.
        var fpl;  
        if(fs == '1') {
            //on all these ifs, you dont have an else, then if your income doesnt fill your criteria, it will be undefined.
            if(income < '1022.00')
               fpl = "0-100%";  
            if (income > '1022.00' && income < '1882.00') 
               fpl = "101-185%";   
            if (result3 > '1882.00' && income < '2033.00') //result3 doesnt even exist, this will throw an error.
               fpl = "186%-200%";
            if (income < '2033.00')
               fpl ="'201% & Over";

            // if you return here, how do you expect the following code to execute? 
            // you just needed to continue the workflow
            return fpl;                

        }             
        //this code is never executed, unless fs is different than 1 (but it is hardcoded)
        result6 = 'Federal Poverty Level: ' + fpl;

        document.getElementById("demo").innerHTML = result6;
 }   

在这里,您的代码没有错误并已修复。

function FPL() {
  //parse the value to get the number.
  var income = parseFloat('4200.00');
  var fs = '1';

  var fpl;
  if (fs == '1') {
    if (income < parseFloat('1022.00'))
      fpl = "0-100%";
    else if (income > parseFloat('1022.00') && income < parseFloat('1882.00'))
      fpl = "101-185%";
    else if (income > parseFloat('1882.00') && income < parseFloat('2033.00'))
      fpl = "186%-200%";
    else if (income < parseFloat('2033.00'))
      fpl = "'201% & Over";
    else
      fpl = 'default value';
  }

  result6 = 'Federal Poverty Level: ' + fpl;

  document.getElementById("demo").innerHTML = result6;
}

FPL();
&lt;p id="demo"&gt;&lt;/p&gt;

【讨论】:

  • 非常感谢您的帮助和 cmets,脚本有效。学到了一些新东西。谢谢你,再次感谢你的帮助。
【解决方案2】:

快速浏览后,您在这一行有一个错误:

如果(结果 3 > '1882.00' && 收入

“result3”确实是未定义,用“income”试试

【讨论】:

  • 不抱歉,这是一个拼写错误,不知道它是怎么进来的,但它也应该是“收入”。
【解决方案3】:

你的income 值不属于你的任何if 语句(我想,你想写if (income &gt; /* instead of &lt; */ "2033.00"),所以fpl 仍然未定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多