2013-07-24 76 views
0

我正在嘗試在Javascript中循環中使用複合賦值,但它向我拋出NaN,我不知道爲什麼,因爲我對Javascript還是比較新的。我基本上是想轉換成一個jQuery驗證自定義方法是:https://github.com/pfwd/NHSNumber-Validation/blob/master/PHP/NHSValidation.class.phpJavascript中的複合賦值導致NaN

這裏是我到目前爲止

 // Taken from https://github.com/pfwd/NHSNumber-Validation 
     var multipliers = {1:10, 2:9, 3:8, 4:7, 5:6, 6:5, 7:4, 8:3, 9:2}; 
     var currentSum, currentNumber, currentMultiplier = 0; 

     //Get submitted NHS Number and remove whitespace 
     var givenNumber = value.replace(/\s+/g, ''); 

     // Get length 
     var numberLength = givenNumber.length; 
     console.debug(givenNumber); 
     console.debug(numberLength); 

     // Number must be 10 digits in length 
     if (numberLength !== 10) { 
      return false; 
     } 

     // Check number 
     var checkNumber = value.substring(9); 
     console.debug(checkNumber); 

     // Loop over each number in the string and calculate the current sum 
     for (var i = 0; i <= 8; i++) { 
      var minus = i-1; 
      var plus = i+1; 
      currentNumber = value.charAt(i); 
      currentMultiplier = multipliers[plus]; 
      currentSum += (currentNumber * currentMultiplier); 
      console.debug("i is " + i + " & current Num: " + currentNumber + " plus current multi: " + currentMultiplier + " plus " + currentSum); 
     } 

     var remainder = currentSum % 11; 
     var total = 11 - remainder; 
     console.debug(currentSum); 

我不知道,如果加號和減號瓦爾是必要的,但他們我嘗試修復NaN問題時嘗試了一些東西。一個典型的控制檯調試行看起來是這樣的:

i is 0 & current Num: 1 plus current multi: 10 plus NaN 

我也用同樣的NaN結果嘗試這樣做:

currentSum = currentSum + (currentNumber * currentMultiplier); 
+0

'變種X; x + = 0; // NaN' –

回答

1
var currentSum, currentNumber, currentMultiplier = 0; 

是不正確的,只有initalizes currentMultiplier。

應該

var currentSum, currentNumber, currentMultiplier; 
currentSum = currentNumber = currentMultiplier = 0; 

演示:http://jsfiddle.net/46dD5/

+0

謝謝,這解決了我的問題,我會在SO允許的情況下接受它作爲當前的答案。當我還在學習哈哈時,我猜不應該變得聰明 – Roy