1:循环结构
1:当循环结构
2:直到型循环结构
2:当循环结构
3:直到型循环结构
4:while循环(解决了具备重复性的问题)
语法:while(循环条件){
// 重复执行的语句(循环代码体)
}
工作原理:先判断条件是否为真,如果条件为真则执行循环体一次,然后再判断条件是否为真,如果为真 再执行循环体,如此反复,直到条件为假时循环结束,循环结束后会继续执行下面的语句
Eg: (1)//显示hello world五次
var i = 0;
while (i<5) {
document.write('hello world ');
i++;
}
(2)// 求1~100的累积和
var num = 1,sum = 0;
while (num <= 100) {
sum = sum + num;
num++;
}
alert(sum);
(3)// 统计1-100之间能被3整除也能被5整除的 数的个数(计数器思想)
var num = 1, count = 0;
while(num <= 100){
if(num % 3 === 0 && num % 5 === 0){
count++;
}
num++;
}
alert(count);
(4)// 输出0-100之间能被7整除的数
var num = 0;
while (num <= 100) {
if (num % 7 == 0){
document.write(num);
}
num++;
}
5:do...while循环
语法:
do{
// 循环代码体
} while(循环条件);
区别:while是条件成立时才执行循环体的内容,而do…while的循环体不管条件成不成立至少会执行 一次。
Eg://求5的阶乘
var num = 5,jiecheng = 1;
do {
jiecheng = num * jiecheng;
num--;
} while (num>=1)
alert(jiecheng);
6:for循环
语法:
for(表达式1,表达式2,表达式3){
// 循环体
}
工作原理:
先执行表达式1,然后判断条件是否为真,为真则执行循环体,然后执行表达式3,
然后判断条件,条件为真执行循环体,然后执行表达式3,
然后判断条件,为真执行循环体,如此反复到条件为假,循环结束
for循环和while循环的区别:代码逻辑更清晰、更加严谨。
// 求100!
var jiechemg = 1;
for (var i = 100;i >= 1;i--) {
jiechemg = jiechemg * i;
}
console.log(jiechemg);
for循环的嵌套。
for(var i = 1;i <= 5;i++){
for(var j = 1;j <= 10;i++){
document.write('*');
}
document.write('<br/>');
}
7:break和continue
break关键字:终止循环,
for(var i = 1; i < 10;i++){
if(i > 7){
break;
}
document.write(i); //1 2 3 4 5 6 7
}
continue关键字:跳过当前循环。直接进入下一次循环
for(var i = 1; i <= 5;i++){
if(i == 3)
continue;
document.write(i); //1 2 4 5
}
注意:变量自增的语句一定要放在continue前面,否则出现死循环。
break与continue区别:
区别:break会终止当前的循环,而continue仅仅是跳过当前的循环。
共同点:break和continue后面的代码将不再执行。
8:跳过/终止指定循环(扩展,仅做了解)
在循环的指定一个名字,使用break或者continue时指定需要终止或者跳过的循环名称。注意,名称后面还要加上冒号。
for(var i =0; i< 10; i++) {
for(var j=0; j< 20; j++) {
if(j == 10) {
break list;
}
console.log(10);
}
}
Eg:入职薪水10K,每年涨幅5%,50年后工资多少?
var money = 10000;
for (var i = 1;i <= 50;i++){
money = money + money*0.05;
}
console.log(money);
Eg:打印100以内 7的倍数。
for (var i = 1;i <= 100;i++){
if(i % 7 === 0){
console.log(i);
}
}
Eg:打印100以内的奇数。
for(var i = 1;i <= 100;i++){
if(i % 2 == 1){
console.log(i)
}
}
应用:
1:打印100以内所有偶数的和。
var sum = 0;
for (var i = 1;i <= 100;i++){
if(i % 2 === 0){
sum = sum + i;
}
}
console.log(sum);
2:求出1-1/2+1/3-1/4…..1/100的和 var i=1;
var sum = 0, num1 = 0,num2 = 0;
for(var i = 1;i <= 100;i++){
if (i % 2 === 0) {
num1 = num1 + (-1) * (1/i)
}else{
num2 = num2 + (1/i);
}
}
sum = num1 + num2;
alert(sum);
3:打印出1000-2000年中所有的闰年,并以每行四个数的形式输出。
var count = 0;
for (var i = 1000;i <= 2000;i++){
if((i % 4 === 0 && i % 100 !== 0) || i % 400 === 0){
document.write(i + '、');
count++;
if(count % 4 === 0){
document.write('<br />');
}
}
}
4:打印三角形。
英文空格实体符号: 
for(var i = 1;i <= 5;i++){
for(var j = 1;j <= i;j++){
document.write('*');
}
document.write('<br />')
}
5.打印一个反过来的三角形
for (var i = 1;i <= 5;i++){
// 计算空格数
var space = 5 - i;
// 输出空格
for(var j = 1;j <= space;j++){
document.write(' ');
}
// 输出星星
for (var j = 1;j <= i;j++){
document.write('*');
}
// 换行
document.write('<br />');
}
1:console常用方法
console.log() // 输出普通信息。
console.warn() // 输出警示信息。
console.info() // 输出提示性信息。
console.error() // 输出错误信息。
console.debug() // 输出调试信息。
console.group() // 开始一组输出信息。
console.groupEnd() // 结束一组输出信息
console.time() // 必须传入一个字段标识,开始计时
console.timeEnd() // 必须传入和time一样的字段标识,来结束计时。
console.time('first');
for(var i=1;i<=1000000;i++){}
console.timeEnd('first');
console.assert() // 对表达式进行断言,只有表达式为false,才会输出信息。
console.assert(5 > 6, '我不会被打印出来');
console.count() // 统计代码执行的次数。
console.dir() // 将DOM节点以树形结构形式进行输出,便于我们查看。
2:firefox、chrome、IE浏览器的DEBUG工具使用
火狐:安装firebug,初识firebug工具面板。
学会调试JS代码。
Eg:打印100–200之间所有能被3或者7整除的数。
Eg:计算100的阶乘。
Eg:求100-999之间的水仙花数。
原理:水仙花数是指一个3位数,它的每个 位上的数字的3次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)
for(var i = 100; i<= 999; i++) {
var first = parseInt(i / 100);
var second = parseInt( (i - first * 100) / 10 );
var third = i % 10;
if(first * first * first + second * second * second + third * third * third === i) {
console.log(i);
}
if(Math.pow(first, 3) + Math.pow(second, 3) + Math.pow(third, 3) === i) {
console.log(i)
}
if(first**3 + second**3 + third**3 === i) {
console.log(i)
}
}
Eg:打印九九乘法表。
for (var i = 1;i <= 9;i++){
for (var j = 1;j <= i;j++){
document.write( j+ "*" + i + "=" + j * i + " ");
}
document.write('<br/>');
}
应用:
质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
1:输出100-200之间所有的素数。
for(var i = 100;i <= 200;i++){
// 假设当前i的值是一个素数
var btn = true;
for(var j = 2;j <= i-1;j++){
// 如果i取余某个值为0;说明刚才的假设失败;应该设为false
if (i % j === 0){
btn = false;
break;
}
}
if(btn == true) {
document.write(i + '、');
}
}
2:求1+2!+3!+...+20!的值,即:1+1*2+1*2*3+...+1*2*...19*20。n!是阶乘的意思。
var sum = 0;
for (var i = 1;i <= 20;i++){
// 求阶乘
var jiecheng = 1; //不能定义在外面 即和sum一切
for(var j = 1;j <= i; j++){
jiecheng = jiecheng * j;
}
// 求阶乘的和
sum = sum + jiecheng;
}
console.log(sum);
// 用函数的方法
function product(max) {
var jiecheng = 1;
for(var i = 1;i <= max;i++){
jiecheng = jiecheng * i;
}
return jiecheng;
}
var sum = 0;
for(var i = 1;i <= 20;i++){
sum = sum + product(i);
}
console.log(sum);
3:完成一个等腰三角形打印功能。
// 行数和列数
var rows = 9,cols = rows * 2 - 1;
// 确定行数
for(var i = 1;i <= rows;i++){
// 计算星星的数量
var star = i * 2 - 1;
// 计算左侧空格数量
var space = (cols - star) / 2;
// 显示空格
for(var j = 1;j <= space;j++){
document.write(' ');
}
// 显示星星
for(var j = 1; j <= star; j++) {
document.write('*');
}
// 换行
document.write('<br/>');
}
4:完成一个梯形打印功能。
// 确定行数和列数
var rows = 9; cols = rows * 2 - 1;
// 确定行数
for (var i = 3;i <= rows;i++){
// 确定星星数量
var star = i * 2 - 1;
// 确定左侧空格数
var space = (cols - star) /2;
// 打印空格
for (var j = 1;j <= space;j++){
document.write(' ')
}
// 打印星星
for(var j = 1;j <= star;j++){
document.write('*');
}
// 换行
document.write('<br />')
}
综合应用:
1:篮球从5米高的地方掉下来,每次弹起的高度是原来的30%,经过几次弹起,篮球的高度是0.1米。
// 因为不管成立不成立 都会执行一次,所以用do..while
var height = 5,times = 0;
do{
times++;
height = height*0.3;
} while (height > 0.1)
console.log(times);
2:有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量。