Javascript - 为什么我的功能出现NAN错误

时间:2014-06-12 20:30:16

标签: javascript function nan

<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错误。任何人都可以解释原因吗?

“每个Park Ranger今天应该将NaN lb(s)的饲料加载到他/她的BART中。”

3 个答案:

答案 0 :(得分:2)

改变这个:

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);

答案 1 :(得分:1)

修改 - 因为Ian suggested更改了参数的名称。

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

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

我可以按&#34; h&#34;或写任何我想要的。从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 :(得分:0)

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

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)