js第三周笔记

115 阅读3分钟

day01

history 对象

history.go(正数/负数/0)://前进,后退,刷新

location:保存了当前窗口的url

程序员的必备常识:一个url几部分组成
1,协议:http(未加密)/https(加密)
2,主机号/域名/ip地址:其中域名需要购买·
3,端口号:https默认端口号:443  http默认端口号804,路由:
5,请求信息:
组成:协议://域名:端口号/路由?请求信息
属性不用记,直接输出location可以查看

通过css选择器查找元素

    1var elem=document.querySelector("任意css选择器")
    缺点:一次只能查找和操作一个,如果匹配多个会返回第一个
    2var elelms=document.querlySelectorAll("任意选择器")
    优点:
        1,找到的是集合
        2,复杂查找很舒服
        3,返回是一个静态集合
   

面试题:静态集合和动态集合

1,动态集合每一次bom变化都会悄悄的查找页面元素让页面元素,让页面和数据一致但效率降低,不支持foreach
2,静态集合每一次bom变化不会悄悄的查找页面元素让页面元素,让页面和数据不一致但效率提高,支持foreach

上树3种:

appendchild(elem)在父元素末尾追加一个子元素
insertBefore(elem,已有子元素)在父元素末尾追加一个子元素elem,但是放在已有子元素前面
replaceChild(elem,已有子元素)在父元素中替换已有子元素

扩展:

input/textarea的两个事件:onfocus(获取焦点)和onblur(失去焦点)
创建变量的新方式:let 变量名=值
    优点:1,解决了声明提前,一定是先创建在使用
          2,带来块级作用域,一个{}就是一个块
          3let绑定事件可以当作下标,foreach中的形参就是用let创建的
 类数组对象变为普通数组:
 lis=Array.from(类数组);

day02

递归

专用于遍历层级不清楚的情况-dom树和数据
如何使用:
    function 函数名(root){
        1,root第一层要做的操作
        2,判断有没有下一层,如果有下一层再次调用此方法,但是传入的实参是自己的下一层
    
    }

绑定事件新方法

 elem.addEventListener("事件名",callback)
 老ie:elem:attachEvent(”on事件名,callback“)

option的简化上树

 select.add(new.Option("innerHTML","value"))

day03

dom的重点:定时器,客户端存储技术,event

 event:
 在函数中传入一个形参e
 老ie:event
  1.获取鼠标位置:
          相对屏幕位置:e.screenX/Y
          相对浏览器显示区域的位置的坐标:e.clientX/Y
          相对网页的位置坐标:e.pageX/Y
  2,阻止冒泡:
  e.stoppropagation()
  老ie:e.cancelbubble=true
  
  事件委托:
  e.target
  老ie:e.srcElement
  阻止浏览器默认事件
  e.preventdefault()
  老ie:e.returnvalue=false
  
  新学的事件
  右键:window.oncontextment
  键盘事件 window.onkeydown--按下和按住
          windiw.onkeypress--数字字母回车空格
          window--onkeyup--松开触发
   获取键码:e.keyCode
   扩展
   eval(str)--去掉str的“”
   elem.nodeName--返回的是标签名但是全是大写

day04

事件取消绑定

  1on事件=()=>{}:取消直接null
  2,addeventlisenter(“事件名”,fi):取消remoeventlisenter(“事件名”,fi)
  注意:调用的函数名必须是同一个
  

call/apply

  语法:函数名.call(借用对象,实参)
  语法:函数名.apply(借用对象,arr)
  调用立即使用而且会还回去

bind:永久替换

  语法:var 新函数=函数名.bind(指定对象,可以传入固定实参)
  
  类数组转换成数组
      1,接住=arrary.prototype.slice.call/apply(类数组)
      2,接住=Arrary.from(类数组)
   判断x是不是数组:
       object.prototype.tostring.call(x)=="(object Arrary)"
       返回true就是数组

es6

  1,let
  2,const
  3.箭头函数
  4,模板函数:``
      可以识别变量但是要加${}
  5,解构赋值
      1,var [a,b,c]=[1,2,3]
      2var {a,b,c}={a:1,c:3,b:2}
          传参顺序随意,return可以传出多个值了
   function f1(){
       return [a,b]}
       
       var [a,b]=f1()
  6,set  map
      set去重
      [...new set(arr)]
      ...:扩展运算符,脱掉数组/对象的衣服

day05

正则

   /no/后缀
   g:找全部 i:不分大小写
   备选字符集:/[备选字符集]/:一个[]只管一个字符集
   如:
   [0-9]
   [a-zA-Z]
   [\U4e00-\u9fa5]
   预字符集
   数字:\d
   数字字母下划线:\w
   空白字符:\s
   除了换行的字符:.
   量词:
       字符集{n,m}最少那个,最多m个
             {n,}最少n个,多了不限
             {n}只能有n个
    选择和分组
        规则1|规则2
        (规则1|规则2)
     ^$表示从头到尾完全匹配
     密码强度验证:(?![]+$)
     []里面写不符合的情况
     、
     切割
     var newstr=strl.split(正则)
     替换
     var newstr=strl.replace(正则,”新内容“)
     
     var newstr=strl.replace(正则,function(key,i,str){
     key--关键字
     i--关键字的下标
     还可以写多个形参
     第二个代表正则中的第一个分组,以此类推
     }
     边输入边判断:.oninput
     鼠标按下:onmousedown
     鼠标松开:onmouseup
     )