我目前正在学习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/中查看示例代码。
感谢。
答案 0 :(得分:1)
我会尝试分解totalSum
方法中发生的事情。
首先使用字符串作为参数调用方法totalSum
,例如执行totalSum("5");
然后sum += a;
(sum = 0 + "5"
:sum = "05"
)(请注意sum
现在变为字符串)
然后return totalSum(--a);
,--a
正在将a
的值转换为数字并减少其值。就像打电话给return totalSum(4);
然后sum += a
(sum = "05" + 4
:sum = "054"
)...
答案 1 :(得分:0)
请参阅documentation of window.prompt:(强调我的)
结果是包含用户输入的文本的字符串,或者值为null。