ECAM script - 核心语法3

272 阅读3分钟

1、***循环结构:宏观几乎是一瞬间执行的,相同 或 相似的 代码

1、*var 循环变量=几; 
      while(循环条件){
	操作;
	变量变化;
       }

2do...while循环语法:
      var 循环变量=几; 
      do{
	操作;
	变量变化;
       }while(循环条件)

面试题:whiledo...while的区别?
	只看第一次,如果大家都满足,则没区别
		   如果不满足,while一次都不执行,而dowhile至少会执行一次
      
3、*for(var 循环变量=几;循环条件;变量变化){
	操作;
      }

4、*退出循环语句:
	break - 退出整个循环
	continue - 退出本次循环

5、死循环:while(true){}		for(;;){}

forEach for in for of - 专门为遍历数组准备的

2、*****数组的基础:

1、什么是数组:一个集合可以保存多个数据
         何时使用:多个相关的数据,都要集中的定义在一个集合中
         为什么:因为一个好的数据结构,能够极大的提升我们程序员的开发效率

2、创建:2种
	1、*直接量方式:var arr=[值1,...];
	2、构造函数方式:var arr=new Array(值1,...);
			坑:new Array(num); - 懂不起:以为你是创建了一个长度为num的空数组

3、访问:数组名[下标];
     添加/修改:数组名[下标]=新值;
     特殊:访问时,下标越界 - 返回undefined
               添加时,下标越界 - 变为稀疏数组,导致下标不连续,导致以后遍历一定会得到undefined

4、数组三大不限制
	1、不限制类型
	2、不限制长度
	3、不限制下标越界 - 不推荐

5、数组唯一的一个属性:数组名.length - 获取数组的长度
	三个固定套路:
		1、末尾添加:arr[arr.length]=新值
		2、获取倒数第n个:arr[arr.length-n];
		3、缩容: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循环遍历数组,语法:
		for(var i in 数组名){
			console.log(i);//自动获得当前数组的所有的下标,不需要我们去设置从哪里开始到哪里结束
			console.log(arr[i]);//当前次元素
		}
	     牛逼:不光可以遍历hash数组,也可以遍历索引数组:
	     建议:hash用for in,索引用for

	4、*js中一切东西都是对象,万物皆对象,除了undefined和null,【一切对象的底层都是hash数组】

3、*****数组的API:数组的函数,前辈们定义好的,只有数组可以使用

  1、*****arr 转为 str:
1、语法:var str=arr.join("自定义连接符");
	作用:
	   1、鄙视时:给你一个数组,将他无缝拼接在一起:
		var arr=["h","e","l","l","o"];
		var str=arr.join("");
		console.log(str);

	   2、拼接为页面元素:
		//以后从数据库中取出数据
		var cities=["-请选择-","北京","南京","西京","东京","重庆"];
		//拼接成页面元素后,innerHTML是识别标签的
		sel.innerHTML="<option>"+cities.join("</option><option>")+"</option>";

  2、*拼接数组:添加元素的新方式:
语法:var newArr=arr.concat(值1,arr1,...);
特殊:1、此方法不修改原数组,只会返回一个新数组
           2、支持传入数组参数,悄悄的将我们传入的数组打散,不会变成二维数组

   3、*截取子数组:取出数组中想要的某一部分组成的一个新数组
语法:var subArr=arr.slice(starti,endi);
特殊:1、此方法不修改原数组,只会返回一个新数组
           2、含头不含尾
           3、第二参数可以省略不写,截取到末尾
           4、第一个参数也可以省略不写,如果两个参数都没写,从头截取到尾 - 深拷贝(复制了一份副本)
           5、支持负数参数,-1代表倒数第一个

  以上的API都不会修改原数组

  以下的API都会修改原数组

4、*删除、插入、替换:
删除:var dels=arr.splice(starti,n);//n代表删除的个数
    特殊:此方法其实也有返回值,返回的就是你删除的元素组成的一个新数组
插入:arr.splice(starti,0,新值1,....);
    特殊:1、没有删除,也有返回值,返回的是一个空数组
               2、原starti位置的元素以及后续元素都会向后顺移
               3、不建议插入数组,会变得不伦不类
替换:var dels=arr.splice(starti,n,新值1,....);
    特殊:删除的个数和插入的个数不必相同

 5、反转数组:arr.reverse();

扩展

二级联动:关键点:
1、必须有二维数组:再次细分分类
2select的专属事件:onchange -> 只有选中项	发生变化
3select的专属属性:select.selectedIndex -> 获取到当前选中项的下标,但是只有select自带此功能
4、其实事件名其实就是函数名

ECMAscript - 核心语法1 - 掘金 (juejin.cn)
ECMAscript - 核心语法2 - 掘金 (juejin.cn)
ECMA script - 核心语法4-1 - 掘金 (juejin.cn)
ECAM script - 核心语法4-2 - 掘金 (juejin.cn)
ECMA script - 核心语法5 - 掘金 (juejin.cn)
ECMA script - 核心语法6 - 掘金 (juejin.cn)
ECMA script - 核心语法7-1 - 掘金 (juejin.cn)
ECMA script - 核心语法7-2 - 掘金 (juejin.cn)
ECMAscript 8 - 掘金 (juejin.cn)
ES5&ES6 - 掘金 (juejin.cn)