# JaveScript第三周知识点
第一天知识点
- BOM的常用对象
- history对象:保存当前窗口的历史纪录(过去的url)
- 前进:history.go(1);
- 后退:history.go(-1);
- 刷新:history.go(0);
- location对象:保存了当前窗口的正在打开的url(现在的url)
- 协议:https(加密)
- 主机号/Ip地址/域名:域名是需要花钱买的,主机和IP地址是免费的
- 端口号:https默认端口为443,http默认为80,只有默认端口可以省略不写
- 文件的相对路径/路由
- 查询字符串/请求消息:前端传输到后端
- 属性:url的五个内容
- 协议:location.protocal;
- 域名:location.hostname;
- 端口:location.port;
- 路由:location.pathname;
- 请求消息:location.search;
- history对象:保存当前窗口的历史纪录(过去的url)
- DOM:原本是可以操作一切结构化文档的
- 核心DOM:可以操作HTML又可以操作XML,但是语法复杂
- HTML DOM:只可以操作HTML,不能访问一切自定义,但语法简单
- xml DOM:只可以操作XML,被json数据格式代替了
- 查找元素:
- 通过关系查找元素
- 直接查找元素:
- document.getElementsByxxx();返回的是一个动态集合HTMLcollection
- var elem=document.querySelector("任意css选择器");
- 操作样式:
- 内联样式
- 样式表样式
- 操作属性:
- 获取属性值
- 设置属性值
- 删除属性
- 判断
- 操作内容:innerHTML/innerText/value
- 创建元素上树:
- 创建空标签
- 设置必要的属性和事件
- 上树
- 创建空标签:var elem=document。creatElement("标签名");
- 为其设置必要的属性和事件 elem.属性名="属性值"; elem.on事件名=function(){}
- 上树:
- 父元素.appendchild(elem);
- 父元素.insertBefore(elem,已有子元素);
- 父元素.replaceChild(elem,已有子元素);
- 删除元素:elem.remove();
-
创建变量:新增的一个let关键字:let 变量名=值;
-
类数组转为普通数组:接住=Array.from(类数组对象)
-
第二天知识点
- 递归:函数自己调用了自己,会有停下来的一天
- 何时使用:用于遍历层级不明确的情况
- 如何使用:
- function 函数名(root){1. 第一层要做什么直接做 2. 判断有没有下一层再调用此方法,传入的实参是自己的下一层 }
- 算法:深度优先,优先遍历当前节点的子节点,子节点遍历完毕才会跳到兄弟节点
- 缺陷:不能过多使用,性能差,开启大量函数调用浪费内存,只在层级不明确的时候使用
- 递归VS纯循环
- 递归:
- 优点:简单易用
- 缺点:性能低
- 纯循环:
- 优点:几乎不占用性能
- 缺点:难度大
- 递归:
- 绑定事件:
- 在HTML上书写事件属性:<elem on事件名="函数名(实参)">
- 在JS中使用事件处理函数属性:elem .on 事件名=function(){操作}
- 在JS中使用事件API
- 主流:elem.addEventListener("事件名",callback);
- 老IE:elem.attachEvent("on事件名",callback);
- 兼容:if(elem.addEventListener){elem.addEventListener("事件名",callback);}else{elem.attachEvent("on事件名",callback);}
- 优点:符合内容与样式与行为的分离原则
- 缺点:有兼容性问题
第三天知识点
- 属于BOM:定时器+event;
- 事件周期:从事件发生,到所有事件处理函数执行完毕的全过程
- 捕获阶段:由外向内,记录发生的事件
- 目标优先触发:目标元素==》当前点击的实际发生事件的元素
- 冒泡触发:由内向外,依次执行之前记录要发生的事件
- 获取事件对event:
- 主流:会自动作为事件处理函数的第一个形参传入
- 老IE:event,全局有这个变量
- 兼容:event,老IE和主流都可以使用
- 得到了事件对象可以做什么?
- 获取鼠标的坐标
- 阻止事件冒泡
- 利用冒泡/事件委托,提升网页性能
- 阻止浏览器的默认行为
- 获取键盘的键码
第四天知识点
- 事件的取消绑定:
- elem.onclick=()=>{},那么elem.onclick=null
- elem.addEventListener("事件名",回调函数);那么elem.removeEventListener("事件名",回调函数);事件名和回调函数必须添加时一模一样
- this的指向:
- 单个元素绑定事件this
- 多个元素绑定事件this
- 箭头函数中的this
- 函数中的this
- 定时器中的this
- 强制改变this的指向:
- call/apply:临时的替换了函数的this
- bind:永久替换了函数中的this
- ES6:
- let,const关键字,箭头函数
- 模板字符串:可以直接识别变量,不再需要+运算去拼接,而且实现了一个简单的JS环境,甚至支持在里面书写API
- 解构赋值:解析结构再进行赋值,赋值的新方式,并且得到了增强
- 类似数组的解构赋值
- 类似对象的解构赋值
- 调用函数时,传递实参的顺序无所谓
- 函数返回的结果,可以有多个
- set和Map新的数据类型
- set:类似数组的一种数据格式-去重数组,然后再转回数组:var s=new set(arr);
- Map:类似于对象的一种数据格式
- 新的循环:for(var v of arr){v;}
第五天知识点
- 正则表达式:定义字符串中字符出现规则的表达式
- 何时使用:切割,替换,验证
- 如何使用:/正则表达式/
- 最简单的正则就关键字原文"no"-->/no/后缀
- 备选字符集:/^[备选字符集]$/
- 一个中括号只管一位字符
- 正则表达式默认只要满足就不管后续
- 前加^,后加$,两者同时使用,代表从头到尾完全匹配,只要做验证必加
- 如果备选字符集中的ascii码是连续的,那么可以省略中间部分
- 预定字符集:前辈们定义好的一些字符集
- 一位数字:\d-->[0-9]
- 一位数字,字母,下划线:\w-->[0-9A-Za-z]
- 一位空白字符:\s
- 一位除了换行外的任意字符:.-很少使用,范围太广
- 优先使用预定义字符集,预定义满足了我们再用备选字符集补充
- 不管是备选字符集,还是预定义字符集,一个都只管一位
- 量词:规定一个字符集出现的次数
- 有明确数量:{n,m},{n,}{n}
- 无明确数量:?,*,+
- 选择和分组:
- 选择:在两个规则中选一个 规则1 | 规则2
- 将多个字符集临时组成子规则( 规则1 | 规则2)
- 指定匹配位置
- ^开头 $结尾
- 两者同时使用,前加^,后加$,表示从头到尾要求完全匹配,只要做验证
- 支持正则表达式的字符串API
- 切割:var arr=str.split("固定切割符"/RegExp);
- 替换:
- 基本替换法:str=str.replace(/正则表达式/后缀,"新内容");
- replace支持正则,并且搭配上后缀g就可以找到全部
- 缺陷:替换的新内容是一个固定的
- 高级替换法:str=str.replace(/正则表达式/后缀,function(a,b,c){})
- 格式化:前加^,后加$,验证,替换所有必须加g
- 基本替换法:str=str.replace(/正则表达式/后缀,"新内容");
- 正则对象
- 创建:
- 直接量:var reg=/正则表达式/后缀;
- 构造函数:var reg=new RegExp("正则表达式","后缀");
- API:验证:var bool=reg.test(用户输入的);
- 创建: