本章主要讲述循环相关语法和内容( while、do while、for )以及break和continue的使用……
一、 while() 循环.
while()循环很常用
(一)基本语法
while ( 条件表达式 ) {
// 执行代码
}
eg:打印1~100的和
var i = 0 // 初始值
var sum = 0
while ( i<100 ) { // 条件表达式 ---》 true就执行以下代码
i ++ // 迭代
sum += i
}
console.log( sum ) // 5050
ps:
- 避免死循环!!!注意迭代值和表达式的设置!
- 注意考虑初始的值 和 迭代量的位置,如果进入循环就进行迭代( i++ ),就考虑第一个值是否有效
二、 do while() 循环.
和 while 循环区别不大,最大的区别在于,do while()是先执行一次代码,再判断
(一)基本语法
do {
// 执行代码
} while (条件表达式)
eg:打印1~100的和
var i = 1 // 初始值
var sum = 0
do {
sum += i
i++ // 迭代
} while (i<=100) //条件表达式
console.log(sum); // 5050
ps: while与do while 的区别
- do while () 最低执行一次;而 while ( ) 最低执行0 次
- do while () 是先执行代码,再判断;而while() 是先判断,再执行代码。
三、 for() 循环.
for 循环也是一种常见且实用的循环语句
(一)基本语法
for ( 初始值 ; 判断条件 ; 迭代量 ) {
// 代码
}
eg:1~100的值
var sum = 0
for (var i = 0 ; i < 100 ; i++ ) {
sum += i
}
console.log(sum)
ps: for( ; ; )的写法有没有错?
这样书写不会报错,但因为缺少迭代量和判断条件,导致其中代码将无限循环。( 通常可以省初始值而写在外面 )
(二) for循环的嵌套
eg: 打印九九乘法表
for ( var i = 1 ; i <= 9 ; i++ ) { // 第一层循环 i,确定行数
for ( var j = 1 ; j <= i ; j++ ) { // 第二层循环 j,确定每行打印个数
document.write(`${j} * ${i} = ${i*j} `)
}
document.write(`<br/>`)
}
ps:
考虑到时间复杂度( 下文提到 )以及运行速度,通常建议for()循环嵌套不超过两层。
四、 break 与 continue.
(一)区别与联系
a. break
break 是跳出当前的一层循环,其后的代码不再执行
eg: 吃4个包子,第3个有虫子,就扔掉第3个,继续吃第4个包子。
for (var i = 1; i <= 4; i++) {
if (i == 3) {
console.log('这个包子有虫子,扔掉');
continue; // 跳出本次循环,跳出的是第3次循环
}
console.log('我正在吃第' + i + '个包子呢。');
}
b. continue
continue 是跳出此次循环( 继续判断下一次循环的条件 ),continue后面的代码也不再执行
eg: 吃5个包子, 吃到第3个发现里面有半个虫子, 其余的不吃了
for (var i = 1; i <= 5; i++) {
if ( i == 3 ) {
break; // 直接退出整个for 循环,跳到整个for下面的语句
}
console.log('我正在吃第' + i + '个包子呢。');
}
五、时间复杂度
o( 1 ) < o( logn ) < o( n ) < o( n^2 ) // 数值越大,速度越慢
常数阶( o( 1 ) )
// 常数阶 就是普通的一句代码
console.log( 'hello world!' )
对数阶( o( logn ) )
// 对数阶通常两个参数 n与i
var sum = 0
for (var i = 0 ; i < 10 ; i++ ) {
sum *= 2 // 执行次数与 参数n(也就是2) 和 i 有关
}
线性阶( o( n ) )
for ( var i = 0 ; i < 10 ; i++ ) {
console.log( "执行了N次" ) // 执行n次
}
循环嵌套 平方阶( o( n^2 ) )
for ( var i = 0 ; i < 10 ; i++ ) {
for ( var j = 0 ; j < 10 ; j++ ) {
console.log( "执行了10*10次" ) // 执行 10*10次
}
}