为了账号安全,请及时绑定邮箱和手机立即绑定

为什么声明sum不赋为0值就变成NaN?赋了就没事

为什么声明sum不赋为0值就变成NaN?赋了就没事

雨溢丰 2016-01-18 23:17:03
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

查看完整回答
反对 回复 2016-02-15
?
海天之恋

TA贡献2条经验 获得超3个赞

NaN是一种特殊的number ,表示无值;

查看完整回答
2 反对 回复 2016-01-19
?
小小酥1992

TA贡献6条经验 获得超2个赞

var sum;相当于你声明了一个变量而没有值,所以它可以是任意东西,因此你把它和数字相加就会出现那种情况!

查看完整回答
1 反对 回复 2016-02-15
?
MadMarical

TA贡献79条经验 获得超122个赞

你好。var sum进行了定义但是未初始化,导致sum被编译器编译为undefined。而parseint解析了字符串返回了一个十进制数(由于此处省略了第二个参数默认为10进制。)问题就出在这里,当一个undefined + 一个十进制数 = ?。编译器无法进行对应的类型转换,将会返回一个NaN(not a number),所以无论你进行多少次加法得到的结果是NaN。但是typeof(sum)为什么是number类型的呢?因为在js中NaN本身就是一个数值类型的东西。如果存疑,可以编写程序直接输出typeof(NaN)来求证一下。

以上是我的浅见,欢迎交流。

查看完整回答
1 反对 回复 2016-01-19
?
zsk13

TA贡献1条经验 获得超1个赞

sum不赋值的时候typeof(sum)不是number,加上一个number后类型变成number,但是值为Nan,

赋值的时候初始为0,就是正常的算术运算。

查看完整回答
1 反对 回复 2016-01-19
  • 5 回答
  • 0 关注
  • 2529 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信