JavaScript Window对象之(BOM、JS 执行机制、location对象、navigator对象、histroy对象、本地存储)

news2024/11/24 19:10:47

目录

  • 1. BOM(浏览器对象模型)
  • 2. JS 执行机制
  • 3. location对象
  • 4. navigator对象
  • 5. histroy对象
  • 6. 本地存储
    • 6.1 localStorage
    • 6.2 sessionStorage

1. BOM(浏览器对象模型)

浏览器对象模型

  • BOM(Browser Object Model)是浏览器对象模型。其中window对象是JavaScript中一个全局的顶级对象
  • 基本的BOM属性和方法都是window的。比如document、alert()、console
  • 所有函数、通过var定义在全局作用域中的变量,都会变成window对象的属性和方法
  • window对象下的属性和方法调用的时候,可以省略window

2. JS 执行机制

JavaScript是单线程的,就会出现如果某个JS任务执行的时间过长,这样就会造成页面的渲染不连贯。但浏览器允许JavaScript脚本创建多个线程来解决这个问题

  • 同步任务: 都在主线程上顺序执行。执行在异步任务前
  • 异步任务: 放入另一个任务队列。JS通过回调函数实现。等同步任务执行完毕,主线程循环(事件循环/event loop)从任务队列获取符合条件的异步任务到主线程执行。有三种类型:
    1. 普通事件。如click、resize等
    2. 资源加载,如load、error等
    3. 定时器,如setInterval、setTimeout

示例如下。控制台依次输出1,2,3

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>test title</title>

</head>
<body>
  <script>
    console.log(1)
    setTimeout(function () {
      console.log(2)
    }, 0)
    console.log(3);
  </script>
</body>
</html>

3. location对象

location是一个对象,保存了各种不同关于URL地址的信息。常用属性和方法:

  • href属性获取完整的URL地址,对其赋值时会在当前标签页跳转到指定的页面
  • search属性获取地址中携带的参数,即符号?后面的部分
  • hash属性获取地址中的啥希值,即符号#后面的部分
  • reload(boolean)方法用来刷新当前页面,默认参数为false。true表示强制刷新页面(ctrl + F5)

示例如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>test title</title>

</head>
<body>
  <script>
    // http://localhost:63342/03-code/test.html?_ij_reload=RELOAD_ON_SAVE
    console.log(location.href)  
    // 页面打开后,立即在当前标签跳转到百度
    // location.href = 'http://www.baidu.com'

    // ?_ij_reload=RELOAD_ON_SAVE
    console.log(location.search)

    // 为空字符串
    console.log(location.hash)

    // 页面刷新后,还会执行这里,所以页面会一直刷新
    location.reload(true)   
  </script>
</body>
</html>

4. navigator对象

navigator是一个对象,记录了浏览器自身的相关信息。常用属性和方法:

  • userAgent属性获取HTTP请求的用户代理头的值。可以通过userAgent检测浏览器的版本和平台类型

示例如下。如果是android或iphone移动端请求页面,直接跳转到指定的页面(移动端页面)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>test title</title>

</head>
<body>
  <script>
    (function () {
      const userAgent = navigator.userAgent
      const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
      const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
      if (android || iphone) {
        location.href = 'http://www.baidu.com'
      }
    })();
  </script>
</body>
</html>

5. histroy对象

histroy是一个对象。主要管理历史记录, 该对象与浏览器地址栏的操作相对应,如前进、后退等。常用属性和方法:

  • back(): 后退
  • forword(): 前进
  • go(Number): 前进(正数)或后退(负数)几个页面

示例如下。先访问百度,再访问当前页面,然后点击后退按钮,就能退回到百度的页面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>test title</title>

</head>
<body>
  <button>后退</button>

  <script>
    const back = document.querySelector('button')
    back.addEventListener('click', function () {
      history.back()
    })
  </script>
</body>
</html>

6. 本地存储

数据存储在用户浏览器中,页面刷新但数据不丢失。localStorage和sessionStorage能储存约5M左右的数据

6.1 localStorage

特性:

  • 可以将数据永久存储在浏览器中, 除非进行删除
  • 同一浏览器的同一域名可以共享
  • 以键值对的字符串形式存储

语法:

  • 存储或更新数据: localStorage.setItem(key, value)。对象需通过JSON.stringify(obj)转换成json字符串再储存
  • 获取数据: localStorage.getItem(key)。json字符串需要通过JSON.parse(JSON字符串)转换成对象
  • 删除数据: localStorage.removeItem(key)

示例如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>test title</title>

</head>
<body>

  <script>

    localStorage.setItem('age', 18)
    console.log(localStorage.getItem('age'))   // 获取到的是字符串
    localStorage.removeItem('age')
    
    const user = {
      uname: 'lily',
      age: 18
    }
    localStorage.setItem('user', JSON.stringify(user))
    console.log(JSON.parse(localStorage.getItem('user')))
  </script>
</body>
</html>

控制台输出如下:
localStorage控制台输出
此时age键已被删除,只有user键。可以在点击全部删除按钮,删除所以local storage
Application效果

6.2 sessionStorage

同localStorage,就是浏览器一关闭,数据就会丢失

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

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

相关文章

26 种 prompt 套路,驯服大模型

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

微服务中的相关概念

Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心&#xff0c;广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现&#xff0c;确保各个服务之间能够方便地找到并通信。它是 Netflix OSS&#xff08;Netflix Open Source Software&#xff09…

Java基础 - 练习(二)打印菱形

Java基础练习 打印菱形&#xff0c;先上代码&#xff1a; // 方法一&#xff1a;基础&#xff0c;好理解 public static void diamond() {//控制行数for (int i 1; i < 4; i) {//空格的个数for (int k 1; k < 4 - i; k) {System.out.print(" ");}//控制星星…

【科研必备神器】人口迁徙大数据科研辅助利器安装使用教程

今天&#xff0c;给大家介绍一款用于对人口迁徙大数据进行分析的神器--人口迁徙数据解析器&#xff0c;可以获取对目标城市迁入、迁出的迁徙数据详情&#xff0c;如&#xff0c;排名前100名的迁徙来源地的迁徙时间、城市名、省份名及迁徙比例。下面&#xff0c;给大家介绍下这款…

Google推出开源代码大模型CodeGemma:AI编程新纪元,代码自动完成和生成技术再升级

论文标题: CodeGemma: Open Code Models Based on Gemma机构: Google LLC论文链接: https://arxiv.org/pdf/2406.11409.pdf CodeGemma模型概述 CodeGemma是基于Google DeepMind的Gemma模型系列&#xff08;Gemma Team et al., 2024&#xff09;开发的一系列开放代码模型。这些…

RK3588/算能/Nvidia智能盒子:加速山西铝业智能化转型,保障矿业皮带传输安全稳定运行

近年来&#xff0c;各类矿山事故频发&#xff0c;暴露出传统矿业各环节的诸多问题。随着全国重点产煤省份相继出台相关政策文件&#xff0c;矿业智能化建设进程加快。皮带传输系统升级是矿业智能化的一个重要环节&#xff0c;同时也是降本增效的一个重点方向。 △各省份智能矿山…

Linux中DNS搭建

文章目录 一、DNS介绍1.1、DNS是什么1.2、DNS的工作原理1.3、DNS的域名结构 二、Bind介绍2.1、bind概述2.2、bind主要配置文件 三、DNS安装四、主要配置文件解析&#xff08;除/etc/named.conf&#xff09;4.1、/etc/named.rfc1912.zones4.2、/etc/rc.d/init.d/named4.3、/etc/…

git idea分支cherry-pick

git idea分支cherry-pick cherry-pick请注意操作前更新代码&#xff01;&#xff01;&#xff01;操作步骤 cherry-pick cherry-pick 挑拣樱桃&#xff0c;对应在分支开发中就是把提交记录从A分支挑拣到B分支 请注意操作前更新代码&#xff01;&#xff01;&#xff01; 操作…

kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参数

场景&#xff1a; kettle中http post步骤如何发送http请求且传递body参数&#xff1f; 解决方案&#xff1a; http post步骤中直接设置Request entity field字段即可。 1、手边没有现成的post接口&#xff0c;索性用python搭建一个简单的接口&#xff0c;关键代码如下&#…

JavaFX按钮

当用户单击按钮时&#xff0c;JavaFX Button类可以触发事件。Button类扩展了Labeled类&#xff0c;可以显示文本&#xff0c;图像或两者都可以。 以下代码显示了如何向Button添加单击操作侦听器。 import javafx.application.Application; import javafx.event.ActionEvent; im…

[14] CUDA_使用Opencv处理图像

CUDA_使用Opencv处理图像 1. Opencv中的图像表示 Opencv 提供了Mat 类来存储图像&#xff0c;如下&#xff1a; cv::Mat img; imgcv::imread("cameraman.tif);定义图像的示例&#xff1a; //定义单通道图像 cv::Mat img(6,6,CV_8UC1); //32位浮点型 Mat img2(256,256,…

异步爬虫:aiohttp 异步请求库使用:

使用requests 请求库虽然可以完成爬虫业务&#xff0c;但是对于异步任务来说&#xff0c;它是做不到的&#xff0c; 这时候我们需要借助 aiohttp 异步请求库来完成异步爬虫的编写&#xff1a; 话不多说&#xff0c;直接看示例&#xff1a; 注意&#xff1a;楼主使用的python版…

MyBatis逆向工程和MyBatisX插件的使用

文章目录 1.ORM思维2.逆向工程3.MyBatisX插件的使用 1.ORM思维 ORM&#xff08;Object-Relational Mapping&#xff0c;对象-关系映射&#xff09;是一种将数据库和面向对象编程语言中的对象之间进行转换的技术。它将对象和关系数据库的概念进行映射&#xff0c;最后我们就可以…

同三维T80006EH单路高清HDMI编码器

同三维T80006EH单路高清HDMI编码器 1路HDMI输入&#xff0c;1路3.5音频输入和输出&#xff0c;支持高清1080P60&#xff0c;支持SD卡录制 支持可解1路网络音频流输出&#xff0c;双向互动 一、产品简介&#xff1a; T80006EH高清编码器&#xff08;采集盒&#xff09;是一款…

【Linux】环境设置MySQL表名忽略大小写

目录 说明 一、摘要 二、查看服务器上MySQL情况 方式一&#xff1a;通过Linux方式 方式二&#xff1a;借助可视化工具&#xff08;Navicat&#xff09; 三、MySQL设置忽略表名大小写的参数&#xff08;lower_case_table_names&#xff09; 四、网上解决方案 方法一&…

卫士通电科网安安全IpSec网关Ukey开发对接

官方公开的开发文档,有几个坑,着重说一下踩坑的记录过程。 1、通过官方的客户端接口模拟程序获取前端参数:随机数和token 2、java程序调用官方sdk,postman请求测试: 3、贴出关键的java集成类: import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; impor…

玄机平台流量特征分析-常见攻击事

前言 熟悉常见的攻击流量特征&#xff0c;我们就可以通过主机的一个流量情况来判断主机遭受了何种攻击。这里来看看玄机平台的一道题目。 步骤1.1 这里需要我们找出恶意扫描者&#xff0c;也就是黑客的ip。下载好附件之后用wiresharke打开&#xff0c;直接筛选http协议的流量…

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口

头文件&#xff1a; //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件&#xff1a; / /// 鼠标…

Linux---系统的初步学习【 项目三 磁盘管理与文件系统】

项目三 磁盘管理与文件系统 3.1 项目知识准备 3.1.1 硬盘 ​ 如果从存储数据的介质上来区分&#xff0c;硬盘可分为机械硬盘&#xff08;Hard Disk Dirve&#xff0c;HHD&#xff09;和固态硬盘&#xff08;Solid State Disk&#xff0c;SSD&#xff09;&#xff0c;机械硬盘…

用户需求分析揭秘:最佳实践与策略

大多数产品团队都有自己处理客户需求的一套流程。但是那些潜在的客户和他们的需求呢&#xff1f;如果在产品管理上已经有一定的资历&#xff0c;很可能对此见惯不怪了。 通常&#xff0c;这些需求是销售人员跑来告诉你的&#xff0c;大概就是说&#xff1a;“超棒的潜在客户一…