第二周JS知识梳理

131 阅读5分钟

第二周JS知识梳理

day04

1、自定义Function的深入了解:

1、创建的方式:3种,但是目前只学了2种

	1、声明方式:
		function 函数名(形参列表){
			函数体;
			return 结果;
		}

	2、直接量方式:
		var 函数名=function(形参列表){
			函数体;
			return 结果;
		}

2、调用:var result=函数名(实参列表);

3、作用域:

	全局:全局变量 和 全局函数,在任何位置都可以使用
	函数:局部变量 和 局部函数,只能在函数调用时内部可用
	带来了变量的使用规则:优先使用局部的,局部没有找全局,全局没有就报错
	缺点:
		1、全局用不到局部的,但是搭配上return即可解决
		2、不要再函数内对未声明的变量赋值,会导致全局污染,降低性能

4、声明提前:

    再程序正式执行之前,会悄悄的将var声明的变量(轻)和function声明的函数(重),集中提前到当前作用域的顶部,但是赋值留在原地

5、重载:

    相同的函数名,根据传入的实参的不同,自动选择对应的函数执行,但是JS不支持,因为同名函数出现,后面的会覆盖前面的
	解决:arguments - 类数组对象,跟数组长得很像
	作用:哪怕没有形参,也可以接住所有的实参
	用法:arguments[1] - 得到的是第二个实参
	           arguments.length - 获取到传入的实参有几个
	变相实现重载:我可以再函数内部判断实参的不同执行不同的操作

2、数组:一个变量可以保存多个数据

1、创建:2种

	1、直接量:var arr=[数据,...];
	2、构造函数:var arr=new Array(数据,...);

2、访问:arr[i];

3、添加/替换:arr[i]=新数据;

4、数组具有三大不限制:

	1、不限制长度
	2、不限制类型
	3、不限制下标越界:
		访问:下标越界 - 得到undefined
		添加:下标越界 - 变成稀疏数组,如果搭配上遍历,则为会得到很多undefined

5、数组唯一的属性:

        arr.length - 获取到数组的长度,最大下标 === 长度-1
	三个固定套路:
		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];
	}

day05

1、DOM:

Document Object Model:文档对象模型,专门用于操作HTML文档的,提供了很多的方法

2、DOM树:

树根document对象,可以通过它找到我们需要的元素

3、查找元素:

1、HTML特点

	ID:其实不用找,直接可用

	标签名和class名:var elems=document/爸爸.getElementsByTag/ClassName("标签名/class名");
		没找到是一个空集合,而且集合不能直接用于做操作,要么下标拿到某个元素,要么遍历拿到每个元素
		不一定非要从document开始,可以写为一个自己已经找到的父元素

2、关系:

    前提:至少要先找到一个人,才可使用关系
	父:elem.parentNode;
	子:elem.children;
	第一个儿子:elem.firstElementChild;
	最后一个儿子:elem.lastElementChild;
	前一个兄弟:elem.previousElementSibling;
	后一个兄弟:elem.nextElementSibling;

4、操作元素:

内容:innerHTML(双标签,识别标签)/innerText(双标签,纯文本)/value(input专属)
	获取:elem.以上三个中的一个
	设置:elem.以上三个中的一个="新值"

属性:
	获取:elem.getAttribute("属性名");		===>	elem.属性名
	设置:elem.setAttribute("属性名","属性值")	===>	elem.属性名="新值"
	特殊:简化版:
		1class必须写为className
		2、自定义属性不能使用简化版

样式:操作内联
	获取:elem.style.css属性名 - 只能获取到内联样式
	设置:elem.style.css属性名="css属性值";

绑定事件:我们要让HTML(内容)和CSS(样式)和JS(行为)分离
	elem.on事件名=function(){//回调函数,是不需要程序员去调用的,在你点击的时候,会自动调用
		操作;
		关键字:this->目前只能在事件之中使用
		单个元素绑定事件,this->就是这个元素
		多个元素绑定事件,this->当前触发事件的元素
	}

day06

1、数组的基础 - 填坑

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

2、按值传递:主要看传递的类型
	1、如果传递的是原始类型,两者互不影响,因为是复制了一个副本给对方

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

3、释放引用类型,一定要看清楚有几个变量引用着,都要释放后才能是放干净,推荐还是使用函数封装,可以自动释放

2、hash数组:

下标是可以自定义的,便于查找

1、创建:2步

	1、创建空数组:var arr=[];
	2、为空数组添加自定义下标并且赋值:arr["name"]="袍哥";

2、访问:arr["name"]

3、遍历:

    length失效了,必须使用for in循环
	for(var i in arr){
		arr[i]
	}

4、JS中万物皆对象,除了undefined和null,一切对象的底层都是hash数组

3、*数组的API:这些预定义方法,只有数组可以使用

1、arr to str:

    var str=arr.join("自定义连接符");
	固定套路:
		1、无缝拼接:arr.join("");
		2、拼接为页面元素:"<开始>"+arr.join("</结束><开始>")+"</结束>"; - 搭配上innerHTML使用

2、拼接数组:添加元素的新方式

	var newArr=arr.concat(新值1,arr2,....);

3、截取子数组:取出某一部分

	var subArr=arr.slice(starti,endi+1);

4、删插替:

    var dels=arr.splice(starti,n,新值1,...);

5、翻转:

    arr.reverse();
    
    

day07

1、ArrayAPI:

1、排序:

	1、笔试时,冒泡排序
	2、开发时使用API:
		arr.sort();//按字符串排序
		arr.sort((a,b)=>a-b);//升序
		arr.sort((a,b)=>b-a);//降序

2、栈和队列:

    这四个方法可以混搭使用
	开头进:arr.unshift(新值1,...);
	开头出:var first=arr.shift();

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

3、ES5 - 新的API:

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

	2、遍历:
		arr.forEach((val,i,arr)=>操作);

		var newArr=arr.map((val,i,arr)=>操作);

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

2、二维数组:希望在数组中,再次细分分类

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

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

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

	

day08

1、String API:

预定义好的方法,我们程序员可以直接用,但是只有字符串可以使用 - 只读

1、转义字符:\

	作用:
		1解决和程序冲突的符号:
			"\""
		2换行:\n	制表符:\t
		3书写unicode编码:\u4e00-\u9fa5

2、*做验证码的判断

	大写:var newStr=str.toUpperCase();
	小写:var newStr=str.toLowerCase();

3、获取指定位置的字符:

    str.charAt(i)	===	str[i]

4、获取指定位置的字符的ascii码:

    var ascii=str.charCodeAt(i)
     通过ascii码转回原文:var 原文=String.fromCharCode(ascii);

5、*检索字符串:

    获取关键字的下标
	var i=str/arr.indexOf("关键字",starti);
	作用:判断有没有
	为不为-1,为-1说明没有,不为-1说明有

6、拼接字符串:

    str.concat()	===	还不如+运算

7、*截取字符串:

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

8、*替换字符串:

	var newStr=str.replace("固定关键字"/RegExp,"新内容");

9、*切割字符串:

    作用:将字符串=>数组
	var arr=str.split("自定义的切割符");
	特殊:
		1、切割后,切割符不在存在
		2、如果切割的是"",每个字符都会被切散