var arr=scoreStr.split(";");var sum;//var sum=0就是815 document.write(arr+"<br/>"); //从数组中将成绩撮出来,然后求和取整,并输出。 for(var i=0;i<arr.length;i++){ sum+=parseInt(arr[i].substr(3,2)); } document.write(typeof(sum)+"-"+sum);//为什么是number-NaN?
5 回答
已采纳
_da
TA贡献22条经验 获得超29个赞
你试试这个。
var sum;
console.log(sum)
sum == undefined
sum 如果你不给他初始化值,默认给他的是预处理时候赋的undefined.任何数字与undefined 进行运算因为无法计算,所以输出NaN
MadMarical
TA贡献79条经验 获得超122个赞
你好。var sum进行了定义但是未初始化,导致sum被编译器编译为undefined。而parseint解析了字符串返回了一个十进制数(由于此处省略了第二个参数默认为10进制。)问题就出在这里,当一个undefined + 一个十进制数 = ?。编译器无法进行对应的类型转换,将会返回一个NaN(not a number),所以无论你进行多少次加法得到的结果是NaN。但是typeof(sum)为什么是number类型的呢?因为在js中NaN本身就是一个数值类型的东西。如果存疑,可以编写程序直接输出typeof(NaN)来求证一下。
以上是我的浅见,欢迎交流。
zsk13
TA贡献1条经验 获得超1个赞
sum不赋值的时候typeof(sum)不是number,加上一个number后类型变成number,但是值为Nan,
赋值的时候初始为0,就是正常的算术运算。
添加回答
举报
0/150
提交
取消