函数if语句值范围返回undefined&数据评估

时间:2017-12-10 20:44:23

标签: javascript html

我正在尝试从用户那里获得输入,并在按钮被推到页面的已定义区域后显示分数,具体取决于他们输入的值。

我不确定IF语句是否是最有效的方法,但我想我会从这里开始。

我创建了一个带有文本输入字段和按钮的简单页面。

我想要的是让用户在字段中输入任意数字,点击按钮后,显示其分数。

我正在使用两个功能来完成此任务。

功能1:'calculate()'最终将取几个数字并执行进一步计算并显示分数。目前,我正在尝试将函数'followerScore()'的结果分配给变量'得分',并显示'得分'的值。

function calculate() {

  var score = followerScore();

  document.getElementById('result').innerHTML = "Your score is : " + score;
}

功能2:'followerScore()'的代码

    function followerScore() {

    var followerScore = 0;
    var followers = document.getElementById('followers').value;

    if (followers <= 25, 000){
          followerScore = 1;
          alert(followerScore);
    } else if (25000 < followers <= 44000){
            followerScore = 2;
    } else if (44000 < followers <= 60000){
         followerScore = 3;
    } else if (60000 < followers <= 75000){
        followerScore = 4;
    } else if (75000 < followers <= 100000){
        followerScore = 5;
    } else if (100000 < followers <= 140000){
        followerScore = 6;
    } else if (140000 < followers <= 180000){
        followerScore = 7;
    } else if (180000 < followers <= 225000){
        followerScore = 8;
    } else if (225000 < followers <= 300000){
        followerScore = 9;
    } else if (followers > 300000){
        followerScore = 10;
    } else followerScore = "did you pick a number?";
  }

我曾希望将值123输入到我的表单中时,点击“计算”按钮我会得到1分,但我得到的错误是未定义的。

html如下:

<body>

  <form>
    <input type="text" placeholder="Followers" id="followers">
  </form>

  <input type="submit" value="calculate" onclick="calculate();">

  <div>
    <p id='result'></p>


  </div>
</body>

我的问题如下: 1.我是否错误地声明了变量'followerScore'或为什么我得到未定义的结果? 2.使用IF ELSE语句是评估和返回值的最佳方法,还是有办法使用SWITCH语句来评估返回这些分数或什么是最佳实践?我感觉好像做一组IF ELSE会非常麻烦,例如,如果我更多地分解范围。

3 个答案:

答案 0 :(得分:3)

您需要从followerScore函数返回followerScore()变量。现在它不返回任何东西。您应该将followerScore()的最后一行设置为return followerScore;

至于你关于开关的问题,我个人觉得你的条件很清楚,而且在javascript的性能方面,我相信if语句更快。请参考这些基准:

Switch statement for greater-than/less-than

答案 1 :(得分:1)

您可以将值移动到数组中并使用Array#findIndex

var values = [0, 25000, 44000, 60000, 75000, 100000, 140000, 180000, 225000, 300000, Infinity],
    followerScore = values.findIndex(v => followers <= v);

这需要检查你是否有号码。

答案 2 :(得分:0)

1)您的followerScore()会返回任何内容,因此您根本无法访问分数。

2)if/else是一种很好的做法,如果你有条件可以检查,当你有更好的数字使用switch或以优化的方式使用if/else时。{/ p>

代码switch

function followerScore() {
    var followerScore = 0;
    var followers = document.getElementById('followers').value;

    switch(followers){
      case '> 300000':
          followerScore = 10;
          break;
      case '<= 300000':
          followerScore = 9;
          break;
      case '<= 225000':
          followerScore = 8;
          break;
      case '<= 180000':
          followerScore = 7;
          break;
      case '<= 140000':
          followerScore = 6;
          break;
      case '<= 100000':
          followerScore = 5;
          break;
      case '<= 75000':
          followerScore = 4;
          break;
      case '<= 60000':
          followerScore = 3;
          break;
      case '<= 44000':
          followerScore = 2;
          break;
      case '<= 25000':
          followerScore = 1;
          break;
      default:
          followerScore = "did you pick a number?";
    }

    return followerScore;
}

优化if/else的代码:

function followerScore() {
    var followerScore = 0;
    var followers = document.getElementById('followers').value;

    if(followers > 300000){
        followerScore = 10;
    } else if(followers <= 300000){
        followerScore = 9;
    } else if(followers <= 225000){
        followerScore = 8;
    } else if(followers <= 180000){
        followerScore = 7;
    } else if(followers <= 140000){
        followerScore = 6;
    } else if(followers <= 100000){
        followerScore = 5;
    } else if(followers <= 75000){
        followerScore = 4;
    } else if(followers <= 60000){
        followerScore = 3;
    } else if(followers <= 44000){
        followerScore = 2;
    } else if(followers <= 25000){
        followerScore = 1;
    } else {
        followerScore = "did you pick a number?";
    }

    return followerScore;
}