为啥我输出的是NaN

来源:7-23 编程练习

努力学习碳

2019-11-08 23:26

<script type="text/javascript">

   var mydate=new Date;

   var weekday=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];

   document.write(mydate.getFullYear()+"年"+(mydate.getMonth()+1)+"月"+mydate.getDate()+"日"+weekday[mydate.getDay()]+"<br />");

  //通过javascript的日期对象来得到当前的日期,并输出。

  

  //成绩是一长窜的字符串不好处理,找规律后分割放到数组里更好操作哦

  var scoreStr = "小明:87;小花:81;小红:97;小天:76;小张:74;小小:94;小西:90;小伍:76;小迪:64;小曼:76";

  var score=scoreStr.split(':');//分割字符

   document.write("1."+score+"<br />");

  var sum = 0;

  var average= 0;

  for( var i =0;i<score.length;i++ ){

    var index = score[i].indexOf(':');  //返回":"字符串出现的位置

    document.write(index+"<br />");

    

sum=sum+parseInt(score[i].substr(0,2));  

   }//sum+=i相当于sum=sum+i,即表示首先先计算sum和i的和,再将其和赋予给sum。

       document.write(sum+"<br />");

   average = Math.floor(sum/score.length);

       document.write("--班级平均分为:"+average);




  //从数组中将成绩撮出来,然后求和取整,并输出。

  


写回答 关注

2回答

  • DrivenCard
    2019-11-14 12:17:31

    第一:var score=scoreStr.split(':');//分割字符 你两次都是。以:分割的,第一个直接改为 ; 也许是你打错了。

    第二: 第一步非分割符以“;”执行的话 后面修改你的求和 

    sum=sum+parseInt(score[i].substr(3));  // sum=sum+parseInt(score[i].substr(0,2));【你原先获取的是底标0,2】,若你没修改第一步,你会发现你输出的内容中 第一个是小明,数据类型已经错误了。

    整体就按照2步修改,就ok了。

    你这列子:没注意细节,多多用document.write()以及console.log()输出测试报错数据,这样你基本不会出什么问题了

  • weixin_慕斯8227459
    2019-11-13 10:27:34

    在 document.write("1."+score+"<br />");这一行,可以发现你的score内的内容是这样的:

    [小明, 87;小花, 81;小红, 97;小天, 76;小张, 74;小小, 94;小西, 90;小伍, 76;小迪, 64;小曼, 76]

    可以看到,在第一个元素“小明”里面,是没有成绩的。

    因此,你后面想取parseInt(score[i].substr(0,2))的时候,当i=0,也就是“小明”这个元素的时候,他的substr(0,2)是汉字而不是数字。数字加汉字,结局当然就悲催了。

    改的方法很简单,把 for( var i =0;i<score.length;i++ ) 改成  for( var i =1;i<score.length;i++ ) 即可。


JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题