JAVASCRIPT数据类型问题

时间:2015-06-29 11:17:42

标签: javascript function types type-conversion

我目前正在学习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,则代码可以正常工作,就像代码中的注释一样。但是,当我不进行类型转换时,事情变得奇怪,我得到054321的最终结果,如果我将提示值输入为5.并且以类似的方式输入3,得到0321,依此类推。

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

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

感谢。

2 个答案:

答案 0 :(得分: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")...

答案 1 :(得分:0)

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

  

结果是包含用户输入的文本的字符串,或者值为null。