第三周知识总结

108 阅读5分钟

Math对象:****

   Math属性:获取圆周率的值Math.PI

   Math的API:

      四舍五入取整:Math.round()   只认识小数点后的第一位数字

 

     乘方:Math.pow(底数,幂)   ES10 简化:底数**幂

     开方:Math.sqrt(num)   只能开方

     绝对值:Math.abs(num)  把负值变为正值

     最大值和最小值: Math.Max/Min(许多数值) 它不支持数组格式

     最大值和最小值: Math.Max/Min.apply(Math,arr)  支持数组

     生成随机数:Math.random():在0~1之间取一个随机的小数

     公式:parseInt(Math.random()*(max-min+1)+min)

 

取自己想要的小数位数:num.toFixed(想要保留的小数位数)

   底层原理:function toFixed(num,d){

num*=(10**d);

num=Math.round(num);

num/=(10**d);

return num;

}

 

Date对象:****

   创建日期:

获取当前时间: let  now=new Date()

自定义时间:let time=new Date(“yyyy/mm//dd hh:mm:ss”)

复制日期: let end=new .Date(start)  

     意义:修改日期时,一般都是原日期进行修改。

 

Date的API:

日期的分量(单位):年(FullYear)月(Month)日(Date)星期(Day)

                  时(Hours)分(Minutes)秒(seconds) 毫秒(Milliseconds)

API为:date.get/set 日期分()

  特殊点:其它都有get和set,唯独Day没有set。

  日期分量的取值范围:

            FullYear   当前的年份

            Month    0~11

                   Date      1~31

    Hours     0~23

    Minutes   0~59

Seconds   0~59

    Day - 0~6;0代表星期天

 

要对日期进行修改时:

  date.set日期分量(data.get日期分量()+/- n)

 

得到当前时间的毫秒数:

 let nows=new Date().getTime()

 

把日期转换为字符串:

date.toLocaleString()  具有兼容问题,一般选择自己封装一个函数

function chinese(date) {

                var arr = ["日", "一", "二", "三", "四", "五", "六"]

                var M = date.getMonth() + 1

                M < 10 ? M = "0" + M : M;

                var d = date.getDate()

                d < 10 ? d = "0" + d : d;

                var x = date.getDay()

                var h = date.getHours()

                h < 10 ? h = "0" + h : h;

                on = h < 12 ? "上午" : "下午"

                var m = date.getMinutes()

                m < 10 ? m = "0" + m : m;

                var s = date.getSeconds()

                s < 10 ? s = "0" + s : s;

                return date.getFullYear() + "年" + M + "月" + d + "日" + " " + "星期" + arr[x] + " " + on + " " + h + ":" + m + ":" + s;

            }

 

BOM对象:****

1. history对象:保存了当前窗口的历史记录(过去的url)

  API: history.go(数值) //正值表示前进;负值表示后退;0表示刷新

 

2. location对象:保存了当前窗口的正在打开的url(现在的url)

   url的组成部分:协议、域名、端口号、路由和请求信息组成

    API:   location="新url"    //替换当前窗口,可以后退

          location.replace("新url");//替换当前窗口,禁止后退

location.reload();   //刷新

3. window对象:

(1)在BOM 中扮演两个角色:

1. 代替全局对象global:保存着全局变量和全局函数

2. 指代当前窗口本身

 

(2)属性:获取大小

            1.获取浏览器的完整的大小:outerWidth/outerHeight

            2.获取浏览器的文档显示区域的大小:innerWidth/innerHeight

3.screen.width/height

 

     (3) API:

open("url","target","width=?,height=?,left=?,top=?") // 打开新窗口

window/newW.close()  //关闭窗口

newW.resizeTo(新宽,新高)  //改变新窗口的大小

newW.removeTo(新x,新y ) // 改变新窗口的位置

(4)提供三个框:

1. 警告框

    语法:alert("警告文字");

2. 输入框

    语法:let user=prompt("提示文字")

3. 确认框

语法:let bool=confirm("提示文字"); //返回是一个bool值;

(5)定时器:

     周期性定时器:

           开启:timer=setInterval(callback,间隔毫秒数);

   停止:clearInterval(timer);  

 

     一次性定时器:

           开启:timer=setTimeout(callback,间隔毫秒数);

   停止:clearTimeout(timer);

 

         特殊:两种定时器之间可以相互转换

(6)window的专属事件

1. window.onload事件  --   加载事件

   等待其它所有资源加载完后才执行该事件

2. window.onresize事件  --  设置大小事件

   配合innerWidth可以做媒体查询

3. window.onscroll事件  --  滚动事件

     获取滚动条位置:window.scrollY

               获取元素距离页面顶/左边有多远:elem.offsetTop/offsetLeft

(7)本地/客户端存储技术:保存者浏览器里面的数据

         分类:

1. cookie:存储大小2kb,操作极其复杂,,最多只能保存30天。(已经淘汰)

2. webStorage:存储的大小由8mb,操作非常简单,永久保存。

(1)sessionStorage - 会话级,只要浏览器一旦关闭,数据就会死亡

(2)localStorage - 本地级,只要不你清空他,他就永远存在。

             操作方法:

添加:sessionStorage/localStorage.属性名=”属性值”

读取:sessionStorage/localStorage.属性名

删除:sessionStorage/localStorage.removeItem("属性名"); //只能删除一个

清空:sessionStorage/localStorage.clear() //删除全部

  1.  event(事件对象)

       1. 事件周期:从事件发生,到所有事件处理函数执行完毕的全过程;其中会经历三个阶段。

        捕获阶段:由外向内,记录着要发生的事件有哪些

目标优先触发阶段:目标元素->当前点击的实际发生事件的元素

冒泡触发阶段:由内向外,依次执行我们之前记录着的要发生的事件

 

       2.获取事件对象

           主流:会自动作为事件处理函数的第一个形参传入e

            IE:event

           兼容:event

          

            作用:

1. 获取鼠标位置

                       获取鼠标相对于屏幕的坐标:e.screenX/Y

           获取鼠标相对于文档显示区域的坐标:e.clientX/Y

           获取鼠标相对于网页的坐标:e.pageX/Y

2. 阻止事件冒泡   (多出现在笔试面试中)

                       主流:e.stopPropation();

            IE:e.cancelBubble=true;

           兼容:e.cancelBubble=true;

3. 事件委托(利用冒泡)

      目标元素:target -- 代表实际触发事件的元素

                      主流:e.target;

          IE:e.srcElement;

兼容:e.srcElement;

 

4. 获取键码;

                       语法:e.keyCode

5. 阻止浏览器的默认行为

                       主流:e.preventDefault();

             IE:e.returnValue=false;

           兼容:e.returnValue=false;

 

递归函数:简单来说就是再函数之中再一次调用了函数自己,当数据中所有的元素都执行了,就或结束。

  使用:常用于遍历层级不明的数据或DOM

 

  使用步骤:

1. 创建函数

   function 函数名(root){

1.判断root第一层代表的是单个元素还是集合。

2.操作

3.判断有没有下一层,如果有就再次调用此函数,传入实参为自己下一层

}

 

2. 调用函数 : 函数名(根元素)

算法:采用深度优先算法!先纵向在横向。

递归函数与循环的区别:

递归:优点:简单易用

          缺点:性能低

纯循环:优点:几乎不占用内存

缺点:逻辑思维强

 

操作DOM元素的新方法:****

   查找元素的新方法:

let elem=document.querySelector(“任意css选择器”)  //找到第一个单个元素

let elems=document.querySelectorAll(“任意css选择器”)  //找到静态元素集合  可以使用forEash遍历

 

let elem=document.getElementsByIDname/classname.tarname()  //找到动态集合

 

动态集合与静态集合的区别:

静态集合:DOM发生变化时,不会再次查找页面元素,提升网页性能,多用于做复杂操作,可以使用forEash遍历。

动态集合:DOM发生变化时,会再次查找页面元素,降低网页性能。不支持forEash遍历。

 

 操作css样式(外部样式和内部样式) 【不推荐使用】

步骤:1.找到DOM页面上你所需要操作样式表

          语法:let sheet=document.styleSheets[i];

      2.获取样式表中所有的样式规则

      语法:let rules=sheet.cssRules;

      3.找到你所要操作的样式规则

       语法:let rule=rules[i]

      4.进行操作

        语法:rule.style.css属性名=”属性值”

 

在js中为DOM创建元素:

   步骤:1.创建空标签

           语法:let elem=document.createElement("标签名");

2.为空标签设置必要的属性和事件

  设置属性:elem.style.CSS属性名=”属性值”

   绑定事件:elem.on事件名=function(){操作}  

3.把所创建的元素添加到DOM页面中

  父元素.appendChild(elem)  //把elem元素添加到父元素的最后面

  父元素.insertBefore(elem,已有子元素) //把elem元素添加到已有子元素的前面

父元素.replaceChild(elem,已有子元素) //把已有子元素替换为elem元素

 

特殊:创建option和图片并上树的简化语法;

     创建option:select.add(new Option("innerHTML","value"))

     创建图片:let  img=new Image(宽,高)

 

删除属性:elem.removeAttribute("属性名")   //多用于删除属性名等于属性值的

          elem.属性名=””;  //用于常见的属性的删除

 

 

删除元素:elem.remove()

 

绑定事件****

**** 方式:

1. 在HTML页面中书写事件属性

         语法:<elem on事件名="函数名(实参)">

2. 在JS中使用事件处理函数属性

         语法:elem.on事件名=function(){操作}

3. 在js中使用事件API

         主流:elem.addEventListener("事件名",callback);

IE:elem.attachEvent("on事件名",callback);

兼容:

if(elem.addEventListener)

{elem.addEventListener("事件名",callback);}

else{elem.attachEvent("on事件名",callback)}

 

 

目前为止所学事件:

   onclick  //点击事件

   onscroll  //滚动事件 window的专属事件  (前提:获取滚动条的长度)

   onchange // 变化事件  select的专属事件   关键:selectedIndex;当前选项的下标

   onsubmit // 提交事件

   onmouseover // 鼠标移入事件

   onmouseout  // 鼠标移出事件

   onfocus  //获取焦点事件  input 的专属事件

   onblur //失去焦点事件   input 的专属事件

   onmousemove //鼠标移动事件  多余 e.pageX/Y搭配使用

oncontextmenu //鼠标右键事件

onkeydown //键盘事件  (前提:获取键码)

onkeyup// 键盘事件 松开才会触发   多用于开发比手速的应用