JavaScript之web APIs BOM window对象 事件循环event loop 本地存储

100 阅读3分钟

window 对象

定时器 - 延迟函数

开启定时器

setTimeout(function(){},等待的毫秒数)

清除延迟函数

let timer = setTimeout(function(){},等待的毫秒数)

clearTimeout(timer)

setInterval和setTimeout的区别:

setTimeout只执行一次,setInterval每隔一段时间执行一次

     //广告显示5秒后消失
       const div = document.querySelector('div')
        setTimeout(function(){
          div.style.display = 'none'
        },5000)
        
     //第二种写法  页面出现数字5秒倒计时 
      const div = document.querySelector('div')
      const span = document.querySelector('span')
        let i = 5
        function fn(){
           i--
           span.innerHTML =i
           if(i < 0){
              clearInterval(fn)
              div.style.display = 'none'
           }
 
        }
        setInterval(fn,1000)

js执行机制

js是单线程,同一时间只能做一件事情,不能同时添加和删除,只能先添加后删除;

所有任务需要排队,前一个任务执行完才会执行下一个任务,如果执行时间过长,会造成页面渲染不连贯,导致页面加载渲染堵塞;

同步线程

前一个任务执行完再去执行下一个任务

异步线程

可同时执行多个任务,js的异步是通过回调函数实现,添加到任务队列中执行;

同步任务

同步任务都在主线程上执行,形成执行栈

异步任务的类型

1.普通事件,如click,resize;

2.资源加载,如load,error;

3.定时器,如setInterval,setTimeout;

js执行流程(事件循环event loop

截屏2023-04-27 18.58.54.png

1.先执行执行栈中的同步任务;

2.异步任务放进任务队列中;

3.同步任务执行完后,会依次读取任务队列中的异步任务,异步任务放入执行栈中开始执行

截屏2023-04-27 18.55.35.png

主线程不断的重复获得任务,执行任务,再获取,再执行的机制成为事件循环event loop

location对象

数据类型是对象,拆分并保存URL地址的各个组成部分

window.location.href = '' window可省略

    //用户点击自动跳转 或倒数5秒后自动跳转
    <a href="http://www.baidu.com">支付成功之后将在<span>5</span>秒后跳转下一页</a>
    <script>
        const a = document.querySelector('a')
        let count = 5
        let clearCount = setInterval(function(){
            count--
            a.innerHTML=`支付成功之后将在<span>${count}</span>秒后跳转下一页`
            if(count === 0){
                clearInterval(clearCount)
                location.href = 'http://www.baidu.com'
            }
        },1000)
       
    </script>

search属性:获取地址中携带的参数,地址中 ?后面的内容

     <form action="">
        <input type="text" name="uname">
        <input type="text" name="age">
        <input type="submit">
    </form>
    <script>
       console.log(location.search) //?uname=xiaoming&age=18
    </script>

hash属性:获取地址中的哈希值,地址中 # 后面的内容

//后期vue路由,经常用于不刷新页面,显示不同的页面
     <a href="#/my">我的</a>
     <a href="#/music">音乐</a>
     <a href="#/advise">广告</a>
    <script>
       console.log(location.hash)
    </script>

reload()方法:刷新当前页面,传入参数true时表示强制刷新

    <button class="reload">刷新</button>
    <script>
       console.log(location.hash)
       const reload = document.querySelector('.reload')
       reload.addEventListener('click',function(){
         //强制刷新 ctrl+f5
         location.reload(true)
       })
    </script>

navigator对象

记录浏览器自身相关信息

userAgent属性:检测浏览器的版本及平台;判断移动端与pc端

<script type="text/javascript">
//匿名函数会在最前面添加 !代替小括号 (function(){})()
  !function(){
    if(/phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone/i.test(navigator.userAgent.toLowerCase()) == true){
        location.href = 'm.html';
    }
}();
</script>

history对象

管理历史记录,与浏览器地址栏操作相对应,如前进,后退,历史记录等;常见于OA

back()方法:后退功能

foward()方法:前进功能

go(参数):参数为1,前进一个页面,参数为-1,后退一个页面

    <button>后退</button>
    <button>前进</button>
    <script>
        const back = document.querySelector('button:first-child')
        const foward = back.nextElementSibling
        back.addEventListener('click',function(){
            // history.back()
            history.go(-1)
        })
        foward.addEventListener('click',function(){
            // history.forward()
            history.go(1)
        })
    </script>

本地存储

相当于浏览器的数据库,数据存储在浏览器中,页面刷新不会丢失数据,容量约5M;

localStorage

数据永久存储在本地(用户电脑),同一浏览器共享,以键值对形式存储,存储为字符串数据类型;

存储数据:localStorage.setItem('key','value') // 也能修改增加新值

获取数据:localStorage.getItem('key')

删除数据:localStorage.removeItem('key')

浏览器查看本地数据 -> f12 -> Application -> Storage -> Local Storage

    localStorage.setItem('uname','xiaoming')
    //获取存储值
    console.log(localStorage.getItem('uname'));
    localStorage.removeItem('uname')
    //修改为新值
    localStorage.setItem('uanme','xiaohong')
sessionStorage

关闭浏览器窗口消失,同一窗口数据共享,以键值对形式存储,用法与localStorage相同

存储复杂数据类型

复杂数据类型 转换为 JSON字符串 :JSON.stringify(复杂数据类型)

JSON字符串转换为 对象:JSON.parse(JSON字符串)

    //创建对象
       const obj = {
            uname:'xiaoming',
            age:18,
            gender:'male'
        }
       //本地存储 对象转换为JSON字符串 stringify
        localStorage.setItem('info',JSON.stringify(obj))
       //获取本地数据 JSON字符串转换为对象 parse
        const localInfo = JSON.parse(localStorage.getItem('info'))
        console.log(localInfo)