簡體   English   中英

Javascript - 為什么我的功能出現NAN錯誤

[英]Javascript - Why am I Getting NAN error with my function

<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 lb(s)的飼料加載到他/她的BART中。”

改變這個:

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

編輯 - 正如Ian 建議更改參數的名稱。

您應該將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);

小提琴

您的函數定義接受兩個參數。

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) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM