<!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
求大神解答这是为什么
我试了一下,a++是自加,每次循环都加一,所以使用a++时,第一次筛选之后arrar[]有四个变量,array[][]中含有大一学生的信息,可以供第二次筛选使用。
但是 a=a++代表着什么呢?a自己加一,然后把加一前的值又付给了a,所以a是不变的,第一次筛选的循环里,a[]的长度始终是1,a[0]的值被不断刷新,最后留下了最后一个符合要求的,a=[ ['小I','女',20,'大一'] ],所以你第二次筛选的时候,只能出来小I,因为第一次筛选的错误的.
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,你的第二次数组里存的永远是最后一个,你第二次筛选的自然就是错误的结果
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的区别。
a++的意思就是a+=1 也就是a = a+1,干嘛前面还要加个a=a++