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);
,--a
将 a
的值转换为数字并递减它的值。所以就像打电话给 return totalSum(4);
然后 sum += a
(sum = "05" + 4
: sum = "054"
) ...
我目前正在学习 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);
,--a
将 a
的值转换为数字并递减它的值。所以就像打电话给 return totalSum(4);
然后 sum += a
(sum = "05" + 4
: sum = "054"
) ...