for 语句
for 语句是循环语句中的一种。
for 语句可以使程序在某条件下重复执行一段。
for 语句相对于 if 语句稍微复杂,通常为以下格式:
for (初始语句; 条件; 条件为真值时执行的语句) {
@H__35@// 循环体
}
初始语句
会在循环开始前进行执行。
条件
会在每次循环结束,结果影响循环语句是否要继续执行。
条件为真时执行的语句
通常会用来影响下一次计算条件的结果。
循环的应用非常广泛,如果有学习过数据结构与算法,会发现大部分的算法都需要循环介入,否则会使程序变得冗余复杂。
如我们需要一段 HTML 列表:
<div id="container"></div>
<script>
var arr = [, , , , , , , , ];
var li1 = '<li>' + arr[] + '</li>';
var li2 = '<li>' + arr[] + '</li>';
var li3 = '<li>' + arr[] + '</li>';
var li4 = '<li>' + arr[] + '</li>';
var li5 = '<li>' + arr[] + '</li>';
var li6 = '<li>' + arr[] + '</li>';
var li7 = '<li>' + arr[] + '</li>';
var li8 = '<li>' + arr[] + '</li>';
var li9 = '<li>' + arr[] + '</li>';
var ul = '<ul>'+ li1 + li2 + li3 + li4 + li5 + li6 + li7 + li8 + li9 + '</ul>';
document.getElementById('container').innerHTML = ul;
</script>
可以发现这里列表的很冗余,都是重复的操作,如果使用 for 循环,可以改成这样:
<div id="container"></div>
<script>
var arr = [, , , , , , , , ];
var lis = '';
@H__35@// 单独拿到数组的长度
var len = arr.length;
@H__35@// 声明变量i用来计数
var i;
for (i = ; i < len; i++) {
lis = lis + ('<li>' + arr[i] + '</li>');
}
var ul = '<ul>' + lis + '</ul>';
document.getElementById('container').innerHTML = ul;
</script>
这里使用 for 循环了列表,和上述声明九个变量然后做拼接的方式是一样的。
循环开始前先声明的变量i
用于计数,表示当前循环到第几次。
在循环开始前先将i
设置为0,这只会执行一次,随后比较当前循环的是否小于数组长度,如果比数组长度小则执行i++
,i++
会先使用i
的值,再做累加 ( i = i + 1) 操作,随循环体,重复上述操作。
具体的流程如下:
len 的值为 9
虽然流程看起来复杂,但是的可维护性得到了提高,冗余也减少了,如果这个时候li
需要加一些,如class
或者style
,只需要循环体中的一行即可。
这种形式的 for 循环还有一种语法:
for (初始语句; 条件; 条件为真值时执行的语句) 需要循环的语句;
和 if 语句很像,这种属于行循环语句,这种用到的比较少,因为的可阅读性比较低,而且一般用到循环的场景都不止一行。
for…in 循环可以用来遍历对象的名。
var obj = {
name: '小红',
age: ,
hobby: ['打篮球', '唱歌'],
};
for (key in obj) {
console.log(obj[key]);
}
@H__35@// :
@H__35@// "小红"
@H__35@// 12
@H__35@// ["打篮球", "唱歌"]
每一次遍历拿到的 key 就是对象的某名,当名被遍历完后会循环。
有部分 key 是无法遍历到的,具体规则可以参阅对象章节。
for (;;) {
console.log('loop...');
}
这样的循环语句会陷入无限循环。
大部分无限循环会让浏览器卡死,需要强制浏览器!
var num = ;
var flag = false;
var len;
var i;
for (i = , len = -; i <= len; i++) {
if (num % i === ) {
flag = true;
break; @H__35@// break可以中断循环
}
}
if (flag) {
console.log(num + '不是质数');
} else {
console.log(num + '是质数');
}
@H__35@// :"17是质数"
首先要知道什么是质数,质数就是只能被1和本身整除的数。
所以如果要判断num
是不是质数,只需要去掉头尾,从2
循环到num - 1
,用num
对每循环数做取余操作,如果存在余数为 0 的,就说明中间有个数可以被整除,那就不是质数,反之就是质数。
var num = ;
var result = ;
var i;
for (i = num; i > ; i--) {
result = result * i;
}
console.log(result); @H__35@// :24
阶乘是所有小于及等于某一数的正整数的积,如4的阶乘,在数学中表示为4!
,结果为4 * 3 * 2 * 1
。
在中,就可以用变量来保存每次做乘法的结果,如 4 的阶乘,就可以用变量result
记录结果,初始值为 1,循环可以从 4 循环到 1,每次将循环到的值乘以result
,循环结束后就可以得到结果。
循环语句和条件语句一样,是给语言带来处理业务能力的重要特性之一。
通常如果需要连续执行多次的重复操作,都应该考虑使用循环来。