第二周

96 阅读6分钟

我硬着头皮学了下去,看到数组的方法头都大了,比如转为字符串的var newArr=arr.join;拼接为页面元素的var str="<标签名>"+arr.join("</标签名><标签名>")+"</标签名>";还有二维数组的二级联动的专属点击事件:onchange=function(){};数组包容 var arr=[[],[]];获取选中项的下标:selectedIndex;还有拼接数组: var newArr=arr.concat(值1,值2),此方法的特殊处是不修改原始数组,只返回一个新数组,并且会悄悄打散,单独传入; 截取子数组:var newArr=arr.slice(开始坐标,结束坐标+1),含头不含尾;删除、插入和替换数组:删除数组:var newArr=arr.splice(开始坐标,n——>开始过后的n个值);插入、替换数组:var newArr=arr.splice(开始下标,0,插入值);特殊是可以传回删除的数据;退出循环结构:1:break:退出整个循环,2:continue:退出本次循环; 数组的分类:索引数组和关联数组:1索引数组:下标都是从0开始的数组,2关联数组下标是可自定义的;如何创建关联数组:1:创建一个空数组; 2:添加自定义下标并且赋值:arr["自定义下标"]=值1; 3如何访问自定义数组:arr["自定义下标"] 关联数组的遍历:for in 循环:=>索引、关联数组都能用 语法 for(var i in 数组名){数组名[i]} 解码和编码: 1:编码: var 变量名=encodeURIcomponent("内容") 2:解码: var 变量名=decodeURIcomponent("内容"); 判断数组是否在有效范围内:is Finite(num) 分支结构: switch...case结构 语法:switch(变量名/表达式){ case 值1:操作1, case 值2:操作2, default:默认操作;} 特殊:如果多次同一操作,可以省略中间部分, 不带有隐式转换 default可以省略 unicode号 汉字第一个为 一:4E00(ascii码:19968) 最后一个 龥:9FA5(ascii码: 40869) 逻辑运算符: && || ! &&短路逻辑 例如:if(a>=500){a*=0.8}可以用短路逻辑写成a>=500&&(a(*=0.8)) 注意:最后的操作最好用小括号括起 Array API: 排序:两种方式: 1、冒泡排序:把数组中的每一个数字取出来,前一个和后一个进行比较,如果前一个>后一个,两者就要交换位置: 公式: var arr=[13,25,4,3675,12,23,3,215,2,1,42,4,65,473,2431,123]; for(var j=0;j<arr.length-1;j++){ for(var i=0;i<arr.length-(j+1);i++){ if(arr[i]>arr[i+1]){ var m=arr[i]; arr[i]=arr[i+1]; arr[i+1]=m; } } } console.log(arr);

	2、正式开发中:数组API提供的排序
		arr.sort();
		特殊:1、默认按照字符串按位PK每个字符的unicode号排序
		      2、按照数字排序:
				arr.sort(function(a,b){//回调函数:不需要我们程序员调用的函数:悄悄的带有循环,提供了两个形参:a是后一个数,b是前一个数
					return a-b;
				})

			//return a-b:如果a>b,返回是一个正数
			//	      如果a<b,返回是一个负数
			//	      如果a==b,返回是一个0,sort根据你反复的结果,来判断两者要不要交换位置

		      3、降序排列:
				arr.sort(function(a,b){//回调函数:不需要我们程序员调用的函数:悄悄的带有循环,提供了两个形参:a是后一个数,b是前一个数
					return b-a;
				})

	强调:JS中只有数组可以排序,以后我们见到网页上任何具有排序功能的案例,底层一定都是一个数组

栈和队列:4个API:添加元素和删除元素的新方式
	 栈:一端封闭,只能从另一端进出的操作
		开头进:arr.unshift(值1,...);
		开头出:var first=arr.shift();//一次只能删掉一个,并且会返回删除的元素
		  缺点:每一次进出都会修改其他人的下标
		
		结尾进:arr.push(值1,...);
		结尾出:var last=arr.pop();//一次只能删掉一个,并且会返回删除的元素
		  优点:不会影响到其他元素的下标

	 队列:只能从一端进入,另一端出:
		开头进:arr.unshift(值1,...);
		结尾出:var last=arr.pop();//一次只能删掉一个,并且会返回删除的元素

		结尾进:arr.push(值1,...);
		开头出:var first=arr.shift();//一次只能删掉一个,并且会返回删除的元素

  1、定时器
	开启定时器:
	timer=setInterval(function(){
		操作
	},间隔毫秒数)

	关闭定时器:
	clearInterval(timer);
  2、鼠标移入:onmouseover
  3、鼠标移除:onmouseout

2、二维数组:数组中的值再次引用了一个数组 何时使用:在一个数组内在此细分内容 1、创建: var arr=[ ["张三丰",128,3500], ["张翠山",30,4500], ["张无忌",18,5500] ];

2、访问:arr[r][c];
   特殊:面试中:
	 列下标越界:返回undefined
	 行下标越界:报错:undefined不能使用[]

3、遍历二维数组:必然需要两个循环嵌套:外层循环控制行,内层循环控制列
		for(var r=0;r<arr.length;r++){
			for(var c=0;c<arr[r].length;c++){
				console.log(arr[r][c]);
			}
		}

3、*****String的概念:明天我们就可以学习String API - 概念很重要 string:字符串:多个字符组成的【只读】字符【数组】

1、为什么字符串也可以叫数组呢?
	和数组有共同点:
		1、支持下标 - 获取某个字符
		2、支持length - 字符的长度
		3、遍历
		4、数组不修改原数组的API,字符串也可以使用(concat、slice)

	不同点:数组修改原数组的API,字符串都不可以使用,但是字符串也有很多属于自己的API(明天)

2、只读:字符串中的所有的API都不会修改原字符串,只会返回新字符串

3、***引用类型的对象:11String(字符串) Number(数字) Boolean(布尔) - 具有包装类型

new Array(数组) Function(函数) Math(数学) Date(日期) RegExp(正则) Error(错误) Object(面向对象) Global - 全局对象:在浏览器端被window对象给代替了:window对象可以省略不写出来

	包装类型:将原始类型的值变为一个引用类型的对象
	  为什么:前辈们发现字符串/数字/布尔经常都会被拿来使用,所以提前提供了包装类型封装为一个引用类型的对象,提供我们一些属性和方法(便于程序员操作)
	  何时使用:只要在你试图用原始类型的值去调用属性或者方法时,会自动套上包装类型
	  何时释放:属性或方法调用完毕后,包装类型自动释放
	  
	为什么undefinednull不能使用.:不具有包装类型,没有任何的属性和方法
            

String API 检索字符串:var i=str.indexOf("关键字",开始下标);没找到则返回值为-1;数组也可以用 替换字符串:var i=str.replace("关键字","替换内容") 切割字符串:var newString=str.split("自定义切割符") 数据渲染 创建空标签 var elem=document.createElement("标签名") 渲染到dom树上 var a=父元素.appendChild("标签名")