for循环(遍历):循环代码块一定的次数
遍历:就是把容器中每一个数据都取出来
for(初始值;收尾条件;变化的规律){代码}
注意:for循环相当于
{初始值;
if(收尾条件){
代码;
变化的规律;
循环:if(收尾条件){代码;变化的规律;}
}else{}
}
思考:
1.问题:
解答:4,4,4,4
<script type="text/javascript">
var arr=[];
for(var i=0;i<4;i++){
arr[i]=function(){console.log(i)}
}
/*上面代码的解释
var arr=[];
{
var i=0;
if(0<4){
arr[0]=function(){console.log(i)};
//函数不会运行,因为没有调用
i++;
if(1<4){
arr[1]=function(){console.log(i)}//同上
i++;
if(2<4){
arr[2]=function(){console.log(i)}//同上
i++;
if(3<4){
arr[3]=function(){console.log(i)}//同上
i++;//这个时候i=4,函数里面的i也就为4
}
}
}
};
}*/
arr[0]()//这个地方调用函数是在上面for循环执行完后再运行的,所以最后的答案为4
arr[1]()//同上
arr[2]()//同上
arr[3]()//同上
</script>
2.问题
答案:
<script type="text/javascript">
var arr=[
{id:123,text:"内容1",time:"2022-05-28 19:30"},
{id:124,text:"内容2",time:"2022-05-31 19:30"},
{id:125,text:"内容3",time:"2022-06-06 14:50"}
];
for(var i=0;i<arr.length;i++){
var nowdate=new Date();//现在的时间
var zhidingdate=new Date(arr[i].time);//指定的时间
var time2=nowdate-zhidingdate//指定时间距离现在过去了多久,这里求出来的值为毫秒数
if(time2<1000*60){
re="刚刚"
}else if(time2<1000*60*60){
re=Math.floor(time2/(1000*60))+"分钟前"//Math.floor()方法是用来向上取整
}else if(time2<1000*60*60*24){
re=zhidingdate.getHours()+":"+zhidingdate.getMinutes()
}else{
re=zhidingdate.getMonth()+1+"-"+zhidingdate.getDate()+" "+zhidingdate.getHours()+":"+zhidingdate.getMinutes()
}
console.log(re)
}
</script>
3.问题
答案:
<script type="text/javascript">
var arr=[1,2,[1,2,3,4],{name:"karen"}];
for(var i=0;i<arr.length;i++){
if(arr[i] instanceof Array){
//instanceof运算符:检测左侧的对象是否是右侧类的实例,如果是则返回true
for(var j=0;j<arr[i].length;j++){
console.log(arr[i][j])
}
}
else{
console.log(arr[i])
}
}
</script>
4.问题:
答案:
<script type="text/javascript">
var arr=[
{name:"karen",
its:["e","r","h"],
books:[1,2,3]},
{name:"jack",
its:[],
books:[1,2,6]},
{name:"karen",
its:[],
books:[1,2,4]}
]
for(var i=0;i<arr.length;i++){
console.log(arr[i].name);
for(var j=0;j<arr[i].its.length;j++){
console.log(arr[i].its[j])
}
for(var h=0;h<arr[i].books.length;h++){
console.log(arr[i].books[h])
}
}
</script>