1、***循环结构: 1、*var 循环变量=几; while(循环条件){ 循环体; 变量的变化; }
2、var 循环变量=几;
do{
循环体;
变量的变化;
}while(循环条件)
面试题:while 和 do...while 的区别?
关键就看第一次,如果第一次条件满足,则两者没有区别
如果第一次条件不满足,则while一次都不会执行,而do...while至少会执行一次
*3、for(var 循环变量=几;循环条件;变量的变化){
循环体;
}
4、*退出循环语句:
break - 退出整个循环
continue - 退出本次循环
我们的循环结构就算是结束了,但是后面你可能还会学到for in、for of、forEach、Map这些循环操作,但是代老师个人不爱称呼这些东西为循环,因为他们是专门为数组遍历准备纯自动循环,不能去设置从哪里开始到哪里结束
2、*****数组的基础: 1、基础概念:一个变量/内存,可以保存多个数据的一种数据结构 何时使用:只要存储多个相关的数据,都要集中定义在数组之中 为什么:一个好的数据结构,可以极大的提升我们程序员的开发效率
2、创建:2种
1、*直接量:var arr=[值1,...];
2、构造函数方式:var arr=new Array(值1,...); - 此方法有一个坑:new Array(num) - 理解为你设置了一个长度为num的空数组
3、访问:数组名[下标];
添加/替换:数组名[下标]=新值;
特殊:
读取元素,下标越界 - 返回undefined
添加元素,下标越界 - 下标不连续,导致变成一个稀疏数组
4、数组的三大不限制
1、不限制元素的长度
2、不限制元素的类型
3、不限制下标越界 - 不是好东西
5、数组唯一的属性:数组名.length - 获取此数组的长度
三个固定套路:
1、向末尾添加元素:arr[arr.length]=新值;
2、获取倒数第n个元素:arr[arr.length-n];
3、删除倒数n个元素:arr.length-=n;
6、遍历数组:对数组中的每个元素执行 相同 或 相似的操作
for(var i=0;i<arr.length;i++){
arr[i];//当前元素
}
7、如何释放一个引用类型:
请你看清楚你的引用类型的数据有几个变量引用着,都要释放后才会真正的释放,建议:我们的代码尽量都要封装为一个函数,函数中的东西会自动释放
索引数组:下标都是由数字组成的 - 我们以前学习的、用到的都是索引数组
8、关联(hash)数组:
什么是:下标是可以自定义的
为什么:索引数组的下标无具体意义的,不便于查找
如何使用:
1、创建:2步:
1、创建空数组:var arr=[];
2、为数组添加下标并且添加元素:arr["自定义下标"]=新值;
2、访问:arr["自定义下标"]
3、强调:hash数组length失效了,永远为0!
遍历hash数组:绝对不能使用for循环,必须使用for in循环 - 专门用于遍历hash数组的,纯自动化的循环
for(var i in 数组名){
i;//自动得到所有下标
数组名[i];//得到每一个元素
}
其实for in循环非常牛逼,不光可以遍历hash数组,也可以遍历索引数组
代老师个人建议:不希望你会for in 忘了 for,hash数组再用for in,索引数组还是用for循环
4、***面试中可能会问:hash数组的原理:
hash算法:将字符串,计算出一个尽量不重复的数字(地址值)
字符串内容相同,则计算出来的数字页一定是相同的
添加元素:将自定义下标交给hash算法,得到一个数字(地址值),直接将你要保存的数据放到此地址值去
获取元素:将指定的自定义下标交给hash算法,得到一个和当初保存时完全一样的数字(地址值),
通过这个地址值就可以找到我们当时保存的数据
5、*****js里面万物皆对象,除了undefined和null,一切对象的底层都是hash数组 - 我们学习这一块最大的目的就是为了铺垫以后学习对象!
3、*****数组的API - 其实就是一些函数,只不过这些函数是前辈们定义好的,我们学习后直接就可以使用的,而且这些函数只有数组可用 1、*数组 转为 字符串: var str=arr.join("自定义连接符");
固定套路:2个
1、鄙视题:将数组里面的内容拼接为一句话/单词
无缝拼接:var str=arr.join("");
2、将数组拼接为DOM页面元素 - 数据渲染页面
var city=["请选择","北京","天津","南京","东京","西京","重庆","成都","厦门"];
var str="<开始标签>"+city.join("</结束标签><开始标签>")+"</结束标签>";
bd.innerHTML=str;
2、*数组拼接:添加元素的新方式
把你传入的实参全部拼接到arr的末尾
var newArr=arr.concat(新元素,...);
特殊:
1、不修改原数组,只会返回一个修改后的新数组
2、concat方法支持你传入一个数组参数,悄悄地将你传入的数组参数打散为单个元素过后再拼接
3、*截取子数组:
根据你传入的开始下标到结束下标进行截取操作
var subArr=arr.slice(starti,endi+1);
特殊:
1、不修改原数组,只会返回一个修改后的新数组
2、含头不含尾
3、endi可以省略不写,会从starti位置一直截取到末尾
4、其实两个参数都可以省略,从头到尾完整的截取一份,也叫做数组深拷贝,和以前的按值传递(浅拷贝不同),复制了一个副本,两者互不影响
5、甚至支持负数参数,-1代表倒数第一个
这条线以上的API都是不会修改原数组的
这条线以下的API都是会修改原数组的
4、*删插替:
删除:var dels=arr.splice(starti,n);//n代表你要删除的个数
特殊:其实splice也有返回值,返回的是你删除的元素组成的一个新数组,因为前辈们考虑到,有可能删除的刚好是你需要用到的
插入:arr.splice(starti,0,新元素1,...);
特殊:1、原starti位置的元素以及后续元素都会向后移动
2、没删除元素的时候也有返回值,返回的是一个空数组
替换:var dels=arr.splice(starti,n,新元素1,...);
特殊:删除的元素个数和插入的元素个数不必相同
5、翻转数组:arr.reverse();
作业: 0、从此以后我们需要熟记熟背每天学习的API 1、二级联动: 注意点: 1、select专属事件 - onchange状态改变事件 2、select专属属性 - selectedIndex,得到选中项的下标 3、搭配上二维数组 2、PPT26 二三题 3、准备两个数组,一个数组里面放了很多国家的名称(arr1),另一个数组是空的(arr2), 页面上有4个按钮: >>:arr1里面所有的东西清空,全部放到arr2里面去 <<:arr2里面所有的东西清空,全部放到arr1里面去 >:arr1的第一个元素,放到arr2里面去 <:arr2的第一个元素,放到arr1里面去 纯粹为了考你api熟练使用