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

a=a++与a++的问题

<!DOCTYPE  HTML>

<html >

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>流程控制语句</title>

<script type="text/javascript">

 //第一步把之前的数据写成一个数组的形式,定义变量为 infos

 var infos=[

     ['小A','女',21,'大一'],

            ['小B','男',23,'大三'],

            ['小C','男',24,'大四'],

            ['小D','女',21,'大一'],

            ['小E','女',22,'大四'],

            ['小F','男',21,'大一'],

            ['小G','女',22,'大二'],

            ['小H','女',20,'大三'],

            ['小I','女',20,'大一'],

            ['小J','男',20,'大三']

 ];

 //第一次筛选,找出都是大一的信息

 var arrar=new Array();

  var a=0;

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

     if(infos[i][3]=="大一"){

         document.write(infos[i]+"<br>")

     arrar[a]=infos[i];

     a++;

     }

 }

 //第二次筛选,找出都是女生的信息

 document.write("<br>"+"第二次筛选出来的"+"<br>");

 for(var j=0;j<arrar.length;j++){

 if(arrar[j][1]=='女'){

  document.write(arrar[j][0]+"<br>");

 }

 }

</script>

</head>

<body>

</body>

</html>

这里是a++,能得到答案 

小A,女,21,大一
小D,女,21,大一
小F,男,21,大一
小I,女,20,大一


第二次筛选出来的
小A
小D
小I

但里面的a++换成a=a++之后,答案就变成了:

小A,女,21,大一
小D,女,21,大一
小F,男,21,大一
小I,女,20,大一

第二次筛选出来的
小I

求大神解答这是为什么

正在回答

4 回答

我试了一下,a++是自加,每次循环都加一,所以使用a++时,第一次筛选之后arrar[]有四个变量,array[][]中含有大一学生的信息,可以供第二次筛选使用。

但是 a=a++代表着什么呢?a自己加一,然后把加一前的值又付给了a,所以a是不变的,第一次筛选的循环里,a[]的长度始终是1,a[0]的值被不断刷新,最后留下了最后一个符合要求的,a=[   ['小I','女',20,'大一']  ],所以你第二次筛选的时候,只能出来小I,因为第一次筛选的错误的.

0 回复 有任何疑惑可以回复我~
#1

Mr丶Jia 提问者

非常感谢!
2016-12-28 回复 有任何疑惑可以回复我~

a++是先用后加,++a是先加后用。比如说:对于a=1,执行b=a++时相当于先后执行b=a,a++,因而b=1,a=2。而执行b=++a时相当于先后执行a++,b=a,因而a=2,b=2。而你的问题中的a=a++,你可以尝试打出a的值,你的a的值应该永远等于0,你的第二次数组里存的永远是最后一个,你第二次筛选的自然就是错误的结果

0 回复 有任何疑惑可以回复我~
#1

Mr丶Jia 提问者

谢谢!
2016-12-28 回复 有任何疑惑可以回复我~

a++的意思是a=a+1,当a=0时a会先自增+1然后再赋值给a,a的值会是0.1.2.3。a=a++:等号右边的a会先赋值给左边的a(a的初值为0,a=a,a=0;),然后右边的a再自增1,但是自增过不会再赋值给左边的a,所以左边的值会一直为0,循环第一次时arrar[0]=A,第二次时a还是0,arrar[0]=D,此时他就会把前面的arrar[0]=A覆盖,以此类推最后结果就是arrar[0]=小I。如果你把a=a++换成a=++a,结果就会变成正常结果,a=++a会先自增1再赋值,和a++效果一样。你可以自己研究一下b=a++和b=++a的区别。

0 回复 有任何疑惑可以回复我~
#1

Mr丶Jia 提问者

好的,谢谢
2016-12-28 回复 有任何疑惑可以回复我~

a++的意思就是a+=1  也就是a = a+1,干嘛前面还要加个a=a++

0 回复 有任何疑惑可以回复我~
#1

Mr丶Jia 提问者

那两者有啥区别呢,都是加1啊
2016-12-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468046    人
  • 解答问题       21891    个

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

进入课程

a=a++与a++的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信