2015-06-29 68 views
0

我目前在學習JS,當我做一些練習時,我發現一些問題,我不清楚JavaScript中的數據類型。我明白JS不需要特定的類型指示,只要可能,它會自動進行類型轉換。不過,我挨一個問題,當我不做類型轉換是如下:JAVASCRIPT數據類型問題

 var sum = 0; 
     function totalSum (a) { 
      if (a == 0) { 
       return sum; 
      } 
      else { 
       sum += a; 
       return totalSum(--a); 
      } 
     } 

     var i = prompt("Give me an integer"); 
     // var num = parseInt(i); 
     alert("Total sum from 1 to " + i + " = " + totalSum(i)); 
     // alert("Total sum from 1 to " + i + " = " + totalSum(num)); 

我注意到代碼完美地工作,如果我改變從字符串數據類型使用parseInt函數功能來詮釋,正如評論在代碼中。但是當我不做類型轉換的時候,事情就變得很奇怪了,如果我輸入提示值爲5,那麼我得到的最終結果是054321。AND以類似的方式輸入3,得到0321等等。

爲什麼會這樣?有人可以向我解釋爲什麼totalSum會是這樣一個數字嗎? javascript是不是會自動幫我把它變成整數,以便它在函數totalSum中工作?

樣本代碼也可以在http://jsfiddle.net/hphchan/66ghktd2/中查看。

謝謝。

+0

'i'是一個字符串,需要將其轉換爲數字,'數(i)' – Hacketo

回答

1

我會嘗試分解totalSum方法中發生的情況。

首先方法totalSum是帶一個字符串作爲參數,喜歡做totalSum("5");

然後sum += a;sum = 0 + "5"sum = "05")(注意:sum成爲現在的字符串)

然後return totalSum(--a);--a被轉換價值a對數字並且遞減它的價值。所以像調用return totalSum(4);

然後sum += asum = "05" + 4sum = "054")...