【问题标题】:Javascript - Why am I Getting NAN error with my functionJavascript - 为什么我的函数出现 NAN 错误
【发布时间】:2014-08-03 07:25:43
【问题描述】:
<script type="text/javascript">
  var sheep = prompt("How many sheeps do we have in the park?");
  var rangers = prompt("How many rangers do we have in the park?");

  function feedPerRanger (sheep, rangers) {
     alert("Each Park Ranger should load " + sheep*2/rangers + 
           " lb(s) of feed into his/her BART today.");
  }

  feedPerRanger ();
</script>

你好

我还是一个初学者,所以这可能是一个新手错误。该脚本应该提醒用户每个公园管理员应该将多少饲料加载到他/她的 BART 上。假设是每只羊 2 磅除以护林员的数量。我不断收到以下 NAN 错误。谁能解释一下为什么?

“今天,每位公园护林员都应将 NaN 磅饲料装入他/她的 BART。”

【问题讨论】:

  • 你能做一个小提琴吗?
  • feedPerRanger 函数的参数 shadow 外部变量(因为它们具有相同的名称)。由于您调用不带参数的函数,因此参数都设置为undefined。我只是将这两个变量传递给函数。为了让问题更明显,让参数名称与变量名称不同,看看在计算中使用每个集合时会发生什么

标签: javascript function nan


【解决方案1】:

编辑 - 因为 Ian 有 suggested 更改参数的名称。

您应该将sheeprangers 变量传递给函数。 你还应该检查它们是否包含数字。考虑一下:

var sheep = prompt("How many sheeps do we have in the park?");
// sheep = "some random string";
// alert ( sheep / 2 );

我可以按“h”或写任何我想写的东西。查看来自 MDN 的prompt

result (of prompt) 是一个字符串,包含用户输入的文本,或者值为 null。

所以添加一点检查变量是否不是带有isNaN 的数字,如下所示:

isNaN(sheep)

我也可以在提示中按取消,然后绵羊或护林员将是null。如果你这样改函数,就没有机会再出现一个NaN

function feedPerRanger(sheep, rangers) {
    if ((sheep && !isNaN(sheep)) && (rangers && !isNaN(rangers))) {
        alert("Each Park Ranger should load " + sheep * 2 / rangers +
            " lb(s) of feed into his/her BART today.");
    } else {
        alert("please use numbers");
    }
}

var sheepCount = prompt("How many sheeps do we have in the park?");
var rangersCount = prompt("How many rangers do we have in the park?");

feedPerRanger(sheepCount, rangersCount);

Fiddle

【讨论】:

  • 很好的建议。我绝对应该检查以确保参数是数字。感谢您的提示!
【解决方案2】:

您的函数定义接受两个参数。

function feedPerRanger (sheep, rangers)

您在通话中不提供任何信息:

feedPerRanger ();

(另外,函数名和括号之间没有空格)

当您创建函数定义时,您正在为局部变量命名。也就是说,sheepranger 是为传递的参数赋予的名称,以便它们可以在函数中使用。所以,当你创建函数定义时,sheepranger 不是你上面创建的变量。

有两种方法可以解决此问题。

  1. 从函数定义中删除你的参数:

    function feedPerRanger(){...}
    
  2. 将变量作为参数传递给函数:

    function feedPerRanger(numSheep, numRangers){
      alert("Each Park Ranger should load " + numSheep*2/numRangers + " lb(s) of feed into his/her BART today.");
    }
    
    feedPerRanger(sheep, rangers)
    

【讨论】:

    【解决方案3】:

    改变这个:

    function feedPerRanger (sheep, rangers) {
        alert("Each Park Ranger should load " + sheep*2/rangers + " lb(s) of feed into his/her BART today.");
    }
    

    用这个:

    function feedPerRanger () {
        alert("Each Park Ranger should load " + sheep*2/rangers + " lb(s) of feed into his/her BART today.");
    }
    

    现在可以了;但是(在我看来)这不是做你想做的更好的方法。

    你可以正确使用你的函数,传递两个泛型参数如下:

    function feedPerRanger(sheep, rangers) {
        alert("Each Park Ranger should load " + sheep*2/rangers + " lb(s) of feed into his/her BART today.");
    }
    
    var sheep = prompt("How many sheeps do we have in the park?");
    var rangers = prompt("How many rangers do we have in the park?");
    
    feedPerRanger(sheep, rangers);
    

    【讨论】:

    • 如果您认为这是正确的答案,请考虑接受它。
    猜你喜欢
    • 2017-01-01
    • 2015-02-25
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多