JAVASCRIPT 数据类型问题

JAVASCRIPT Data Type Issue

我目前正在学习 JS,在练习时,我发现 Javascript 中的数据类型有一些我不清楚的问题。我知道 JS 不需要特定的类型指示,它会尽可能自动进行类型转换。但是,当我不进行类型转换时遇到一个问题,如下所示:

        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 函数将数据类型从字符串更改为 int,代码将完美运行,就像代码中的注释一样。但是当我不进行类型转换时,事情变得很奇怪,如果我将提示值输入为 5,我得到的最终结果是 054321。以类似的方式,输入 3,得到 0321,依此类推。

为什么会这样?有人可以向我解释为什么 totalSum 会是这样的数字吗? javascript 不是会自动帮我把它变成整数,以便它在函数 totalSum 中工作吗?

示例代码也可以在http://jsfiddle.net/hphchan/66ghktd2/中查看。

谢谢。

参见 documentation of window.prompt(强调我的)

result is a string containing the text entered by the user, or the value null.

我将尝试分解totalSum方法中发生的事情。

首先使用字符串作为参数调用方法 totalSum,就像 totalSum("5");

然后sum += a; (sum = 0 + "5" : sum = "05") (注意现在sum变成了字符串)

然后 return totalSum(--a);--aa 的值转换为数字并递减它的值。所以就像打电话给 return totalSum(4);

然后 sum += a (sum = "05" + 4 : sum = "054") ...