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

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?



雨溢丰
浏览 2530回答 5
5回答

_da

你试试这个。var sum;console.log(sum)sum == undefinedsum 如果你不给他初始化值,默认给他的是预处理时候赋的undefined.任何数字与undefined 进行运算因为无法计算,所以输出NaN

海天之恋

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

小小酥1992

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

MadMarical

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

zsk13

sum不赋值的时候typeof(sum)不是number,加上一个number后类型变成number,但是值为Nan,赋值的时候初始为0,就是正常的算术运算。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript