2015-06-29 69 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")...