1、****循环结构: 1、问题:打印输出10000句hello world console.log("1hello world") ... console.log("10000hello world");
2、什么是循环? 1、吃饭 2、睡觉 3、做作业 4、上班上课 5、活着 6、公转自转
***循环:反复执行 【相同 或 相似】 的操作,几乎是一瞬间就完成了很多次
循环三要素:
1、循环条件:开始、结束,重复执行的次数
2、循环体:循环操作,干什么事
3、循环变量:创建,并且要让他不断的改变(自增、自减),往往向着不满足循环条件在变化
3、while循环: 语法: var 循环变量=几; while(循环条件){ 循环体; 循环变量的变化; } 原理:先判断循环条件,如果条件为真,则执行一次循环体中的语句,然后再一次判断循环条件,如果为真,则再执行一次循环体中的语句 ... 直到循环条件为假,才会退出循环 强调:循环是一次一次执行的,只不过速度很快,而且循环没结束之前,会卡主后续代码
死循环:停不下来的循环,多半用于不确定循环次数的时候
while(true){
循环体;
}
循环流程控制语句:死循环多半都要搭配上一个:退出循环:break; - 可以出现在任何一个循环之中
小练习: 1、在控制台输出1000次hello world 2、计算1-1000之间所有数字的和 3、计算1-1000之间所有奇数的和 4、猜数字小游戏 扩展:随机整数公式:parseInt(Math.random()*(max-min+1)+min); 5、以上的4个操作也用for循环进行尝试
函数:反复执行的 - 多半用户来触发,用户触发一次,就执行一次
循环:反复执行的 - 宏观上来看几乎是一瞬之间
*4、for循环:和while能做的事是一模一样的,只不过语法比while更简单,看上去也更加的舒服 语法: for(var 循环变量=几;循环条件;循环变量的变化){ 循环体; }
特殊:1、死循环:for(;;){循环体}
2、创建循环变量部分,也可以,隔开创建多个变量
总结:
1、while循环:一般用于 循环次数不明确的情况,死循环
2、for循环:一般用于 已经确定了循环次数的情况 - 个人推荐,语法更加的简便
2、*****数组: 问题:保存10000个同学的姓名: var name1="代老湿1"; ... var name10000="代老湿10000";
创建变量名越多,开辟的内存空间越大,网站性能有所影响 - 以上这种写法:变量太多了
希望一个变量可以保存多个数据 - 数组
数组中的元素,都是按照线性顺序排列:
特点:除了第一个元素,每个元素都有一个唯一的前驱元素
除了最后一个元素,每个元素都有一个唯一的后继元素
*数组中的每个元素都有一个唯一的位置序号,称之为【下标】,用来表示数组中的每一个元素,下标是从0开始的,到最大长度-1结束
1、创建数组:2种方式
*1、直接量方式:var arr=[];//空数组
var arr=[元素,元素,...];
2、构造函数方式:var arr=new Array();//空数组
var arr=new Array(元素,元素,...);
好奇创建这个数组有啥用?
只是在保存数据而已,这些数据以后肯定有用
2、访问数组中的元素
数组名[下标];
3、添加/修改数组中元素
数组名[下标]=新元素;
特殊:
1、下标处如果没人,则为添加
2、下标处如果有人,则为替换
3、如果下标越界 - 会导致我们的数组变为一个稀疏数组,不是好东西,因为会导致下标不在连续
4、数组具有3大不限制:
1、不限制长度 - 优点
2、不限制类型 - 优点
3、不限制下标越界:
获取时,下标越界,返回结果是一个undefined
添加时,下标越界,导致我们的数组变为一个稀疏数组,不是好东西,因为会导致下标不在连续
其实你可以想想,数组是一个长度无限的公交车,没坐人的地方其实也有一个默认值为undefined(垃圾)
以上我们学习内容,数下标不舒服,容易数错,前面的还好,后面的就难受了
5、数组唯一的一个属性:length长度
语法:数组名.length;
*有了这个属性,我们就可以实现数组的三个固定套路:
1、永远希望想末尾添加元素:arr[arr.length]=新值;
2、获取倒数第n个:arr[arr.length-n];
3、缩容:删除数组的倒数n个:arr.length-=n
6、遍历数组:把数组中的每一个元素都取出来执行相同 或 相似的操作
公式:
for(var i=0;i<数组名.length;i++){
数组名[i];//当前次拿到的数据
}