js第二周

59 阅读5分钟

day01

1、数组的基础:

1、构造函数创建数组:var arr=new Array(num);//创建了一个长度为num的空数组

2、按值传递:var a=x; var b=a;
	如果传递的是原始类型,两者互不影响,因为是复制了一个副本给对方

	如果传递的是引用类型,两者相互影响,因为是把自己的地址值给了对方 - 浅拷贝

3、释放一个引用类型,看清楚有多少个变量使用着他,全部都要释放后,才能释放干净 - 尽量的要封装为一个函数

2、hash(关联)数组:下标可以自定义的

1、创建:21、创建一个空数组:var arr=[];
	2、添加自定义下标并且赋值:arr["自定义下标"]=新值;

2、访问:arr["自定义下标"];

3、length失效了,永远为0!遍历不能用for循环,必须使用for in
	for(var i in arr){
		i;//自动得到每一个下标
		arr[i];//每一个元素
	}

3、数组的API:这些方法只有数组可以使用

1、arr to str:var str=arr.join("自定义连接符");
	1、无缝拼接:var str=arr.join("");

	2、拼接为页面元素:var str="<开始>"+arr.join("<结束><开始>")+"<结束>";

2、拼接数组:添加的元素的新方式
	var newArr=arr.concat(新值1,...,arr2);

3、截取子数组:取出一部分来使用
	var subArr=arr.slice(starti,endi+1);

4、删插替:var dels=arr.splice(starti,n,新值1,...);

day02

1、数组的API: 栈(一端封闭、另一端进出 - 优先使用最新的数据)和队列(一端进,另一端出 - 按照先来后到的顺序) 开头进:arr.unshift(新值1,...); 开头出:var first=arr.shift();

	结尾进:arr.push(新值1,...);
	结尾出:var last=arr.pop();

2、二维数组:

var arr=[[],[],[],[]];

访问:arr[行下标][列下标];
	列下标越界,得到undefined
	行下标越界,得到一个报错

遍历二维数组:
	for(var r=0;r<arr.length;r++){
		for(var c=0;c<arr[r].length;c++){
			arr[r][c];//每一个元素
		}
	}

3、新的API: 判断:var bool=arr.every/some((val,i,arr)=>判断条件);

遍历:arr.forEach((val,i,arr)=>操作);
           var newArr=arr.map((val,i,arr)=>操作);

过滤:var subArr=arr.filter((val,i,arr)=>判断条件);
汇总:var sum=arr.reduce((prev,val,i,arr)=>prev+val);

day03

String API:

1、转义字符:\
	1、解决和程序冲突的字符
		"\""

	2、换行:\n	制表符:\t

	3、书写unicode编码的文字:\uXXXX

2、大小写转换:var newStr=str.toUpper/LowerCase();

3、获取某个位置的字符:str.charAt(i) 还不如 str[i]

4、获取某个位置的字符的ascii码
	var ascii=str.charCodeAt(i);
     转会原文:
	var 原文=String.fromCharCode(ascii);

5、检索字符串:判断有没有,数组也可以使用
	var i=str/arr.indexOf("关键字",starti);
	为不为-1,为-1说明没有,不为-1说明有

6、拼接字符串:var newStr=str.concat("新字符串",...) 还不如+运算

7、截取字符串:3个
	var subStr=str/arr.slice(starti,endi+1);
		             .substring(starti,endi+1);//不支持负数参数
		             .substr(starti,n);//n代表截取的个数,不必考虑含头不含尾

8、替换字符串:
	var newStr=str.replace("固定关键字","新内容");
	
9、切割字符串:arr<=>str
	var arr=str.split("自定义切割符");

10、去掉空白字符:
	var newStr=str.trim/trimStart/trimEnd();

扩展:创建元素的步骤:3步 1、创建空标签:var x=document.createElement("标签名");

day04

1、Math:数学对象,不需要创建,可以直接使用

1、属性:Math.PI

2、API:
	1、取整:
		上取整:Math.ceil(num) - 小数位数不能超过15位
		下取整:Math.floor(num);
		四舍五入:Math.round(num);
		更推荐:
			1parseInt(str);
			2、num.toFixed(d);//具有四舍五入的功能,并且小数位数自己规定,但是返回的是一个字符串,建议搭配parseFloat使用

	2、乘方:Math.pow(底数,幂) ===> 底数**幂;
	     开平方:Math.sqrt(num);

	3、最大值和最小值:
		Math.max/min(一堆数字);
		默认不支持数组比较:
		解决:Math.max/min.apply(Math,arr);

	4、绝对值:Math.abs(负数);

	5、随机整数:parseInt(Math.random()*(max-min+1)+min);

2、Date:日期对象

1、创建:
	1、获得当前时间:
		var now=new Date();

	2、自定义时间:
		var date=new Date("yyyy/MM/dd hh:mm:ss");
		var date=new Date(yyyy,MM-1,dd,hh,mm,ss);

	3、复制日期:
		var end=new Date(start);

2、操作:
	1、两个日期之间可以相减,可以得到一个毫秒差,换算出我们想要的部分

	2、API:FullYear、MonthDateDay、Hours、Minutes、Seconds、MilliSeconds
		每一个分量都有一对儿getXXX/setXXX,除了Day没有set操作

	3、自己格式化

3、定时器:

周期性|一次性:
	开启:timer=setInterval/Timeout(()=>{操作},间隔毫秒数);
	停止:clearInterval/Timeout(timer);
	timer保存的是定时器的序号,数字:0 1 2 3 4 5

day05

1、BOM:Browser Object Model - 浏览器对象模型,专门用于操作浏览器的,它的东西都不需要创建直接使用

2、window对象:

属性:
	1、获取浏览器的完整的大小:outerWidth/Height;
	2、*获取浏览器的文档显示区域的大小:innerWidth/Height;
	3、屏幕大小:screen.width/height;

方法:
	1、*打开窗口/链接:var newW=open("url网址","target/自定义","width=300,height=300,left=300,top=300");
	2、关闭窗口:window/newW.close();
	3、移动窗口的位置:newW.moveTo(新X,新Y);
	4、修改窗口的大小:newW.resizeTo(新宽,新高);
	5、*三种弹窗框:
		1、警告框:alert();
		2、输入框:prompt();
		3、确认框:confirm();
	6、*三种时间:
		1、加载事件:onload
		2、修改浏览器尺寸事件:onresize
		3、***滚动事件:onscroll=function(){
				1、获取滚动条当前的位置:this.scrollY;
				2、获取xx元素距离页面顶部有多远:elem.offsetTop;
			       }
	7、*****定时器
	8、*****客户端的存储技术 - 本地存储:
		webStorage:sessionStorage(会话级) 和 localStorage(本地级)
		添加:xxxStorage.属性名="属性值";
		获取:xxxStorage.属性名;
		删除:xxxStorage.removeItem("属性名");
		清空:xxxStorage.clear();