web三、 window对象,延时器,定时器,时间戳,location对象(地址),本地存储-localStorage,数组去重new Set

news2025/2/26 3:41:13

一、window对象

window对象 是一个全局对象,也可以说是JavaScript中的 顶级对象

像document、alert()、console.log()这些都是window的属性,基本BOM的属性和方法都是window的

所有通过 var定义 在全局作用域中的 变量 、 函数 都会变成window对象的属性和方法

window对象下的属性和方法调用的时候可以 省略window

<body>
    <a href="./10-histroy对象.html">10跳转页面</a>

    <script>
        window.alert(`window自带的对象alert`) //输入语句也是window自带的对象

        //var定义的变量和function函数都是window对象的属性和方法,一般window省略不写
        console.log(name)

        var name = '小红'
        console.log(window.name) //没省略之前的



        function fn() {

            console.log(`函数`)

        }
        window.fn() //没省略之前的
    </script>
</body>

二、延时器

**语法:**setTimeout(回调函数,等待的毫秒数)

setTimeout仅仅只执行一次,所以可以理解为就是把一段代码延迟执行,平时省略window

清除延时器****clearTimeout(timer-id值)

返回值是一个正整数,表示定时器的****编号(唯一的id值)

<script>
        //延时器
        // setTimeout(函数,毫秒时间)
        //  set开启    clear关闭
        let timeid = setTimeout(() => {
                console.log('延时器执行的倒计时')

            }, 2000)
            // clearTimeout(延时器的id)
        clearTimeout(timeid) //关闭延时器
    </script>

三、定时器

可以每隔指定时间自动重复执行某些代码

setInterval(函数,间隔时间-毫秒单位)

注意:1.函数名字不需要加括号2.定时器返回的是一个id数字

<body>
    <button class="btn1">开启定时器</button>
    <button class="btn2">关闭定时器</button>

    <script>
        let timer = null //定义全局的变量储存定时器的id值

        const btn1 = document.querySelector(".btn1")
        const btn2 = document.querySelector(".btn2")

        btn1.addEventListener('click', function() {
            //setInterval(函数,毫秒为单位时间)
            // 防抖--·开启一个定时器之前,·关掉之前的定时器
            clearInterval(timer)
            timer = setInterval(function() {
                console.log(`间隔执行的定时器`)

            }, 3000)
        })

        btn2.addEventListener('click', function() {
            //clearInterval(定时器的id)
            clearInterval(timer)
        })
    </script>
</body>

三、时间戳

时间戳: 是指1970年01月01日00时00分00秒起至现在的 总毫秒数(数字型) ,

算法:

将来的时间戳 -现在的时间戳 = 剩余时间毫秒数

剩余时间毫秒数 转换 为 年月日时分秒 就是倒计时时间

转换公式

h = parseInt(总秒数 / 60 / 60 % 24) 计算小时

m = parseInt(总秒数 / 60 % 60) 计算分数

s = parseInt(总秒数 % 60) 计算当前秒数

获取时间戳的三种方式

date.getTime()
+new Date0 使用较为简单
Date.now( )

 <script>
        // 获取时间戳的三种方式

        /**1获取的是从1970年到现在的时间戳----
         * 小括号里可以写从1970年到指定的某年某月的时间,显示的是国际的时间,
         * 前面加一个+转换为毫秒*/
        const date = new Date()
        const date1 = new Date('2022-2-2 12:00')
        console.log(`从1970年到2022-2-2 12:00`, date1) //获得的是国际时间
        console.log(+new Date()) // 获得的是国际时间---前面加+转化为毫秒

        
        console.log(`日期对象来调用`, date.getTime()) //2日期对象来调用


        Date.now() //3 获取的是当前的时间
    </script>

四、location对象

location (地址) 它 拆分并保存 了 URL 地址 的各个 组成 部分, 它是一个 对象

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!--提交表单跳转  -->
    <form action="">
        <input type="text" name="username">
        <input type="text" name="userage">
        <button>提交</button>
    </form>

    <a href="#/music">音乐</a>

    <button class="btn">刷新</button>

    <script>
        //location (地址) 它拆分并保存了 URL 地址的各个组成部分, 它是一个对象
        // 常用属性和方法:

        console.log(location)

        // //跳转地址 location.href 
        // location.href = 'http://www.baidu.com' //百度的地址,自动跳的

        const form = document.querySelector('form')

        //表单点按钮可以触发提交事件→submit
        form.addEventListener('submit', function(e) {

            //拿路径中?后面的--查询参数location.search
            console.log('URL' + location.search)
                //  e.preventDefault() //事件对象中的阻止默认行为
        })

        const a = document.querySelector('a')
        a.addEventListener('click', function() {
            // 获取#后面  Location.hash
            console.log(location.hash)

        })


        //  用来刷新当前页面reload( )
        const btn = document.querySelector('.btn')
        btn.addEventListener('click', function() {
            location.reload()
        })
    </script>
</body>

</html>

五、navigator对象(了解即可)

navigator 是 对象 ,该对象下记录了 浏览器自身的相关信息

常用属性和方法:

通过 userAgent 检测浏览器的版本及平台

六、histroy对象(了解即可)

history (历史)是对象,主要管理历史记录,该对象与浏览器地址栏的操作相对应,如前进、后退等

history对象一般在实际开发中比较少用,但是会在一些OA 办公系统中见到。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>histroy对象</title>
</head>

<body>
    <button class="back">←后退</button>
    <button class="forward">前进→</button>
    <script>
        const back = document.querySelector("back")
        back.addEventListener('click', function() {
            // history (历史)是对象,主要管理历史记录,
            //history.back() //可以后退功能
            // forward()前进功能,
            history.go(-1) //前进后退功能参数如果是1前进1个页面如果是-1后退1个页面
        })
    </script>
</body>

</html>

七、存储-localStorage(重点)

本地存储:作用:数据可以长期保留在本地浏览器中,刷新页面和关闭页面,数据也不会丢失,

键值对的形式存储,本地只能存储字符串,无法存储复杂数据类型

存储数据localStorage.setltem(key, value)

读取数据localStorage.getltem(key)

删除数据localStorage.removeltem(key)

1、基础数据类型的存取

<body>
    <script>
        //存储数据
        // setItem(自定义的key名,存储的数据)
        localStorage.setItem('name', '小红')
        localStorage.setItem('name', '小李')
            // 获取数据
            // getItem(需要获取的数据的key名)
        let num = localStorage.getItem('name')
        console.log(num) //小李,同名储存数据,会覆盖

        // 删除数据
        // localStorage.removeItem('name')
    </script>
</body>

2、复杂数据类型的存取

存储复杂数据类型:

**本地只能存储字符串,无法存储复杂数据类型,要将复杂数据类型转换成JSON字符串,在存储到本地。**语法:JSON.stringify(复杂数据类型)

属性名使用双引号引起来,不能单引号,属性值如果是字符串型也必须双引号

读取复杂数据类型:

因为本地存储里面取出来的是字符串,不是对象,无法直接使用

**所以要把取出来的字符串****转换为对象。**语法:JSON.parse(JSON字符串)

 <script>
        // 1.基本类型- 直接写数据存储
        // 2,复杂类型
        //存:先JSON.stringify转成JSON格式的字符串
        // 取: JsON.parse 转回原有复杂类型
        const pig = {
                name: '佩奇',
                age: 5
            }
            //存储复杂类型的数据先转成JSON格式的字符串---"name":“佩奇”--格式的字符串的引号都是双引号
            // console.log(JsoN.stringify(pig))
        localStorage.setItem('zhu', pig)
        console.log(localStorage.getItem('zhu')) //object

        console.log('zhu', JSON.stringify(pig))

        // 想要用对象转换 JSON.parse把json格式的字符串转回复杂类型

        const newObj = JSON.parse(localStorage.getItem('zhu'))
        console.log(newObj)
    </script>

八、存储sessionStorage(了解)

用法跟localStorage 基本相同

区别是:当页面浏览器被关闭时,存储在sessionStorage的数据会被清除

存储:sessionStorage.setltem(key,value)

获取:sessionStorage.getltem(key)

删除:sessionStorage.removeltem(key)

九、数组去重new Set(数组)

 <script>
        // 不允许包含重复元素
        // const s = new Set()

        // s.add(1)
        // s.add(10)
        // s.add(100)
        // s.add(10)

        // s.delete(100)


        // console.log(s)

        const arr = [10, 20, 30, 40, 50, 20, ]
            // 数组去重,转集合{}--→再转回数组(...展开运算)
        let s = new Set(arr)
        console.log(s)
            // console.log([...new Set(arr)])
        console.log([...s])
    </script>

十、案例

1.(距离xx时间的倒计时)

<body>
    <div class="countdown">
        <p class="next">今天是2024年11月25日</p>
        <p class="title">下班倒计时</p>
        <p class="clock">
            <span id="hour">00</span>
            <i>:</i>
            <span id="minutes">25</span>
            <i>:</i>
            <span id="second">20</span>
        </p>
        <p class="tips">18:30:00下课</p>
    </div>
    <script>
        // 倒计时案例 当前距离  2023年1月28日 18:30 还剩多少时间

        //  转换公式
        //  h = parseInt(总秒数 / 60 / 60 % 24)   //   计算小时
        //  m = parseInt(总秒数 / 60 % 60)        //   计算分数
        //  s = parseInt(总秒数 % 60)             //   计算当前秒数
        // ---------------------------------------------------------
        //晚上6:30的时间戳-现在的时间戳剩的毫秒数转时分秒  

        // 思路:每隔一秒执行一次,代码放到setInterval里面
        //未来时间-现在时间     →转秒数→转时分秒→写入到html页面
        function fn() {
            let end = +new Date('2024-11-25 18:00:00') //结束时间
            let now = Date.now() //现在的时间
            let res = (end - now) / 1000


            h = parseInt(res / 60 / 60 % 24)
            h = h < 10 ? '0' + h : h
            m = parseInt(res / 60 % 60)
            m = m < 10 ? '0' + m : m
            s = parseInt(res % 60)
            s = s < 10 ? '0' + s : s

            document.querySelector('#hour').innerHTML = h
            document.querySelector('#minutes').innerHTML = m
            document.querySelector('#second').innerHTML = s
        }
        fn()
        setInterval(fn, 1000)
    </script>

2.bilibili搜索页面(本地储存)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./iconfonts/iconfont.css">
    <link rel="stylesheet" href="./css/search.css">
</head>

<body>
    <div class="m-search">
        <div class="form">
            <i class="iconfont icon-search"></i>
            <input type="text" placeholder="凡人修仙传" class="search-input">
            <i class="iconfont icon-guanbi"></i>
        </div>
        <a href="javascript:void(0);" class="cancel">取消</a>
    </div>
    <div class="search-hot">
        <h2>大家都在搜</h2>
        <div class="list">
            <span class="hotword-item">开学前一天的中国速度</span>
            <span class="hotword-item">LOL新英雄大招全图范围</span>
            <span class="hotword-item">央视曝光飙车炸街产业链</span>
        </div>
    </div>
    <div class="gap"></div>
    <div class="history">
        <h2>历史搜索</h2>
        <ul>
            <!-- 
        <li>
          <i class="iconfont icon-lishijilu_o"></i>
          <span>凡人修仙传</span>
        </li>
      -->
        </ul>
        <div class="clear-history">
            <a href="javascript:void(0);" class="clear">清除历史记录</a>
        </div>
    </div>

    <!-- 搜索列表展示 -->
    <ul class="recommend-list hide">
        <li class="list-item">xxxx</li>
    </ul>

    <script>
        // /用户回车发布历史记录--页面添加1i标签
        //准备一个数组,用户回车往数组里面新增数据,根据数组数据的个数渲染li标签
        // let arr = ["a", "b"]

        // JSON.parse

        let arr = JSON.parse(localStorage.getItem('history')) || []

        //渲染的功能用户回车就要使用→封装一个函数→有参数(数组数据是可变的,将来数据变,li标签也要变)
        function render(data = []) {
            let str = data.map(item => {
                return `
                   <li>
                      <i class="iconfont icon-lishijilu_o"></i>
                     <span>${item}</span>
                  </li>
              `
            }).join('')
            document.querySelector('.history ul').innerHTML = str
        }
        render(arr)
            //用户如果按下的是回车键Enter,获取用户输入的数据放到arr(前追加unshift)
        const inp = document.querySelector('.search-input')
        inp.addEventListener('keyup', function(e) {
                if (e.key == 'Enter') {
                    //如果用户输入的是空的或有空格都不能发布
                    if (inp.value.trim() == '') {
                        alert('请输入内容:')
                        return
                    }
                    arr.unshift(inp.value)
                        // 添加完数据后,去重集合
                    arr = [...new Set(arr)]
                        // 去重之后,存储到localstorage
                    localStorage.setItem('history', JSON.stringify(arr))
                    render(arr)
                    inp.value = ''
                }
            })
            // 清除内容
            // 清空-localstorage要清除--保证刷新的不能是旧数据;本地js中的arr也要清除,这次渲染的是arr是空的
        const clear = document.querySelector('.clear-history a')
        clear.addEventListener('click', function() {
            arr = []
            localStorage.removeItem('history')
            render(arr)
        })

        // 使用localstorage流程:默认数据提取本地存储localstorage→使用→如果js中数据变化了,就要往本地存储localstorage里面存一次
        // 如果涉及到清空→localstorage里面的要清空;js中的数据也要清空
    </script>


</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

RK356x-11:在win11的WSL中开发SDK

我拿到的SDK建议开发的系统是Ubuntu22.04&#xff08;在SDK-docs中的文档有说明&#xff09;&#xff0c;因此&#xff0c;WSL中要先安装好它。由于PC机上WSL本身不支持aarch64架构&#xff0c;所以&#xff0c;进行ARM64的RK356X开发&#xff0c;需要手动加入支持。用到的支持…

Java日志框架:log4j、log4j2、logback

文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使…

C语言(一)——初识C语言

目录 简单认识一段代码 数据类型 变量和常量 变量的作用域和变量的生命周期 常量 字符串 转义字符 注释 函数 数组 操作符 关键字 结构体 结构的声明 结构成员的类型 结构体变量的初始化 结构体传参 简单认识一段代码 main()函数是程序的入口&#xff0c;所以…

创新领先+效率领先,助力中国九牧加速品牌全球化

2024年&#xff0c;在全球市场经济和国家政策的双重驱动下&#xff0c;中国企业正在加速出海。 从早期粗放式的贴牌代工&#xff0c;到凝聚技术、产品、营销力的自主品牌出海&#xff0c;中国企业在国内市场对国际品牌上演过的追赶-超越戏码&#xff0c;如今正在海外市场上演。…

基于单片机的噪音检测系统(论文+源码)

1整体方案设计 2.2.1功能设计 本课题为噪音分贝仪&#xff0c;在功能上设计如下&#xff1a; 1.可以准确的识别周围环境的噪声大小。 2.检测的噪声大小可以通过液晶进行显示&#xff0c;并直观的给出当前噪声的程度大小&#xff1b; 3.可以通过按键设定报警阈值&#xff0…

十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)

目录 一、概述 二、参考资料 三、代码 四、日志 五、定位函数调用 六、README和工具 一、概述 软件开发中常见的比较棘手的问题就是hartfault/Default_Handler/dump&#xff0c;俗称跑飞了。 参考cmbacktrace&#xff0c;在瑞萨RZN2L/T2M实现栈回溯&#xff0c;串口打印…

OpenAI推出“深思熟虑对齐(Deliberative Alignment)”:为大语言模型建立更可靠的安全与伦理框架

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

GitCode 光引计划投稿 | GoIoT:开源分布式物联网开发平台

GoIoT 是基于Gin 的开源分布式物联网&#xff08;IoT&#xff09;开发平台&#xff0c;用于快速开发&#xff0c;部署物联设备接入项目&#xff0c;是一套涵盖数据生产、数据使用和数据展示的解决方案。 GoIoT 开发平台&#xff0c;它是一个企业级物联网平台解决方案&#xff…

【鸿蒙(HarmonyOS)性能优化指南】启动分析工具Launch Profiler

Launch Profiler概述 DevEco Studio内置Profiler分析调优工具。其中Launch主要用于分析应用或服务的启动耗时&#xff0c;分析启动周期各阶段的耗时情况、核心线程的运行情况等&#xff0c;协助开发者识别启动缓慢的原因。此外&#xff0c;Launch任务窗口还集成了Time、CPU、F…

微博用户消费趋势报告,多个领域增速明显,年轻一代成消费主力军

文 | 魏力 发布 | 大力财经 站在岁末回首这一年&#xff0c;在信息浪潮的汹涌翻涌之下&#xff0c;社交媒体平台犹如社会经济的晴雨表&#xff0c;精准地折射出大众生活与消费的万千景象。近日&#xff0c;大力财经看到一份报告&#xff0c;微博发布了《2024微博用户消费趋势…

智能公文写作一体机,开箱即用快速部署超便捷

在繁忙的政企事业单位中&#xff0c;时间就是生产力。公文撰写作为各类组织日常工作的核心环节&#xff0c;却常常因为传统的公文处理流程繁琐耗时而成为效率的瓶颈。如何打破这一瓶颈&#xff0c;实现高效的公文撰写&#xff0c;成为了众多单位关注的焦点。 一款即开即用的公文…

重温设计模式--中介者模式

中介者模式介绍 定义&#xff1a;中介者模式是一种行为设计模式&#xff0c;它通过引入一个中介者对象来封装一系列对象之间的交互。中介者使得各个对象之间不需要显式地相互引用&#xff0c;从而降低了它们之间的耦合度&#xff0c;并且可以更方便地对它们的交互进行管理和协调…

无人机双目视觉鲁棒定位方法!

无人机双目视觉鲁棒定位方法是一种先进的定位技术&#xff0c;它利用两个摄像头&#xff08;即双目相机&#xff09;模拟人的视觉系统&#xff0c;通过视差来确定物体的位置。这种方法在无人机定位领域具有广泛的应用前景&#xff0c;特别是在GPS信号拒止或弱纹理环境中&#x…

【R语言遥感技术】“R+遥感”的水环境综合评价方法

R语言在遥感领域中是一个强大的工具&#xff0c;它提供了一系列的功能和优势&#xff0c;使得遥感数据的分析和应用更加高效和灵活。以下是R语言在遥感中的具体应用&#xff1a; 数据处理&#xff1a;R语言可以处理和清洗遥感数据&#xff0c;包括数据转换、滤波处理、去噪和数…

vue预览和下载 pdf、ppt、word、excel文档,文件类型为链接或者base64格式或者文件流,

** 方法1&#xff1a;word、xls、ppt、pdf 这些文件&#xff0c; 如果预览的文件是链接可以直接打开&#xff0c;可用微软官方的预览地址 ** <iframe width"100%" :src"textVisibleURl " id"myFramePPT" style"border: none;backgroun…

无人设备遥控器之定向天线篇

一、定义与功能 定向天线&#xff0c;顾名思义&#xff0c;是通过改变天线的辐射方向&#xff0c;实现信号发射、接收和增强的天线。它可以让信号以更高的功率、更远的距离传输到指定区域&#xff0c;同时也能够降低与周围天线之间的干扰。在无人设备遥控器中&#xff0c;定向天…

什么是Redis缓存击穿?如何解决

1.缓存击穿介绍 Redis的缓存击穿指的是在高并发场景下&#xff0c;当一个被大量请求访问的热点key&#xff08;即非常热门的数据项&#xff09;在Redis中过期时&#xff0c;所有请求几乎同时发现缓存失效并尝试直接从后端数据库读取数据&#xff0c;这可能会导致瞬间大量的数据…

Qt父窗口处理子窗口大小变化消息installEventFilter

1.需求描述 父窗口从上到下时标题栏&#xff0c;播放窗口和工具栏&#xff0c;希望监测中间播放窗口的大小变化&#xff0c;来根据分辨率自动调整播放画面的宽高&#xff1b;因为工具栏和标题栏可以隐藏&#xff0c;所以父窗口大小不变&#xff0c;中间的播放窗口也会随着工具…

HiQA: A Hierarchical Contextual Augmentation RAG for Multi-Documents QA---附录

附录 建议的问答系统 在建议的框架中&#xff0c;问答过程是单步的。首先&#xff0c;根据查询使用 RAG 从文档库中检索相关知识。随后&#xff0c;将此上下文与问题一起输入到语言模型中以生成响应。返回答案的第一个字符所需的时间在 1 到 3 秒之间。图 5 显示了 QA 流程的…