第三周知识点总结

83 阅读5分钟

第一天.txt

BOM常用对象:

1.history对象:保存当前窗口的历史记录

前进:history.go(1);
后退:history.go(-1);
刷新:history.go(0);

2.location对象:

常识:

1.协议:https/http/ftp/ws/

2.主机号IP地址/域名

3.端口号:https默认端口为443,http默认端口为80,只有默认端口可以省略不写。

4.文件的相对路径/路由:百度加密了。

5.查询字符串/请求信息

属性: 协议:location.protocal;
域名:location.hostname;
端口:location.port;
路由:location.pathname;
请求信息:location.search;
跳转:location="新url"
替换当前窗口,可以后退
location.replace("新url")
跳转后,禁止后退
location.reload();刷新
DOM:

1.查找元素

1.通过关系

2.直接找元素

1.document.getElemtByxx();

2.document.querySelector;

2.var elems=document.querySelectorAll("任意选择器");

面试题:document.getxxx和document.queryxxx的区别

 1.后者更适合复杂查找
 2.动态集合和静态集合的区别

1.动态集合:每一次DOM发生变化,他都会悄悄在此查找,效率低下,不支持forEach

2.静态集合:不会悄悄地再次查找,效率高,支持使用forEach

2.样式表样式:

var sheet=document.stylesheet[i];
var rules=sheet.cssRules;
var rule=rules[i];
console.log(rule.style.css属性名);
rule.style.css属性名="css属性";

3.操作属性:

1.获取属性值: 核心DOM:elem.getAttribute("属性名");
HTML DOM:elem.属性名;
2.设置属性值: 核心DOM:elem.setAttribute("属性名","属性值");
HTML DOM:elem.属性名="属性值";
3.删除属性:设置属性值为空 核心DOM:elem.removeAttibute("属性名");
HTML DOM:elem.属性名="";属性节点删不干净
4.判断有没有,垃圾 核心DOM:elem.hasAttribute("属性名");
HTML DOM:elem.属性名!="";
注意:class必须写为className; 4.操作内容-你是学习完整的:innerHTML/innerText/value;
5.如何创建元素以及上树:三步 1.创建空标签 var elem=document.createElement("空标签")
2.为其设置必要的属性和事件 elem.属性名="属性值";
3.上树:3种 父元素.appendChild(elem);//在父元素末尾处追加一个子元素elem; 父元素.insertBefore(elem,已有子元素);//父元素追加一个子元素,放在已有子元素的前面。 父元素.replaceChild(elem,已有子元素);会替换掉已有子元素。 创建变量:新增的一个let关键字 let 变量名=值; 类数组转为普通数组:接住=Array.from(类数组对象);

第二天.txt

1.递归:

专门用于遍历层级不明确的情况 如何使用: function 函数名(root){
} 函数名(实际的根)

2.绑定事件:3种方式

1.在HTML上书写事件属性 <elem on事件名="属性名(实参)"></elem>
缺点: 1.不符合内容与样式与行为的分离原则 2.无法动态绑定,一次只能绑定一个元素 3.不支持绑定多个函数对象 2.在js内使用时间处理函数属性 elem.on事件名=function(){操作} 扩展:select&option select.add(new option("innerHTML","value"))

第三天.txt

获取事件对象event: 主流:会自动作为事件处理函数的第一个形参传入 1.获取鼠标的坐标: 获取鼠标相对于屏幕的坐标:e.screen X/Y
获取鼠标相对于窗口/客户端/文档显示区域的坐标:e.client X/Y
获取鼠标相对于网页的坐标:e.page X/Y
2.阻止事件冒泡:鄙视面试中 主流:e.stoppropagation();
老IE:e.cancelBubble=true;
兼容:e.cancleBubble=true;
3.利用冒泡/事件委托-开发中常用,提升网页性能,有了它我们的事件函数也可以换为箭头函数了。 目标元素:e.target;
老IE:e.srcElement;
兼容:e.srcElement;
4.阻止浏览器的默认行为:比如:e.preventDefault();
老IE:e.returnValue=false;
兼容:e.returnValue=false;
右键事件-window.oncontextmenu;
键盘事件-window.onkeydown;
按住和按下,任何键盘按键都可以触发 window.onkeypress;
按住和按下,只有字母,数字,回车,空格可以触发,其他按键不行 window.onkeyup;
松开,任何键盘按键都可以出发(比手速的游戏) 获取建码:e.keyCode;
可以获取你按了哪个键。

第四天.txt

1、事件的取消绑定

1. 如果使用了elem.onclick=()=>{},那么elem.onclick=null

2.如果使用elem.addEventListener("事件名",回调函数); 那么:

elem.removeEventListener("事件名",回调函数);
- 事件名和回调函数,必须和添加时的一模一样 this的指向:非常多 单个元素绑定事件this->这个元素 多个元素绑定事件this->当前元素 箭头函数中的this->外部对象 ***函数中的this->当前正在调用函数的这个人 定时器的this->window

三个固定套路:

1、Math.max/min.apply(Math,arr) - 也能支持数组参数:

2、Object.prototype.toString.call/apply(x)==="[object Array]";//鄙视题:判断xx是不也是一个数组

3、类数组转为普通数组:

1、接住=Array.prototype.slice.call/apply(类数组对象)
2、接住=Array.from(类数组对象)

解构赋值

1、类似数组的解构赋值

let [a,b,c]=[1,2,3];
console.log(a);
console.log(b);
console.log(c);

2、类似对象的解构赋

let {a,b=默认值,c}={c:3,a:1,b:2};
console.log(a);
console.log(b);
console.log(c);
//形参可以设置默认值,如果自己传入了,就用自己的

3、调用函数时,传递实参的顺序无所谓了

function zwjs({name,age,hobby="女"}){ return 我的名字叫${name},今年${age}岁,喜欢${hobby}; } console.log(zwjs({hobby:"学习",age:18,name:"袍哥"}));

4、函数的返回的结果,可以有多个

function f1(){ var a=1; var b=2; return [a,b]; } var [a,b]=f1(); console.log(a,b);

第五天.txt

1.正则表达式:定义字符串中字符出现规则的表达式

1.最简单的正则就是关键字原文"no"->/no/后缀 语法:/正则表达式/后缀g(全部)/i(忽略大小写)

2.备选字符集:/^[备选字符集]$/

强调,一个中括号,只管一位字符。 如果备选字符集中的ascii码是连续的,那么可用-省略掉中间部分,比如: 一位数字:[0-9]; 一位字母:[A-Za-z]; 一位数字、一位字母、下划线:[0-9A-Za-z_] 除了数字(很少使用):[^0-9]

3.预定义字符集:

一位数字:\d 一位数字、一位字母、下划线:\w 一位空白字符:\s

4.量词

1.有明确数量:

字符集{n,m}:至少n个,最多m个 字符集{n,}:至少n个,多了不限 字符集{n}:n个

无明确数量:

字符集?:可有可无,最多1个 *:可有可无,多了不限 +:至少一个,多了不限 选择和分组: (规则1|规则2) API: 1.切割:var arr=str.split("固定切割符"/RegExp);
2.替换: 基本替换法:str=str.replace(/正则表达式/后缀,"新内容");
高级替换法:str=str.replace(/z正则表达式/)=>(){}
格式化:id.replace(reg,function(a,b,c,d,e,f,g,h)){}
验证:var bool=reg.test("用户输入的");