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

目录

  • 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_SAVEconsole.log(location.href)  // 页面打开后,立即在当前标签跳转到百度// location.href = 'http://www.baidu.com'// ?_ij_reload=RELOAD_ON_SAVEconsole.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.userAgentconst 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.rhkb.cn/news/352697.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC M1系统编译ffmpeg-gl-transition

MAC M1系统编译ffmpeg-gl-transition 1. 本人系统2. 编译&#x1f4b0;系统准备2.1. 下载【ffmpeg-gl-transition】到用户家目录下&#xff0c;并解压2.2 下载ffmpeg源码2.3. brew安装GLEW glfw32.4 复制vf_gltransition.c文件到ffmpeg2.5 修改ffmpeg源码文件2.6 设置库目录和…

SpringBoot购物网站

摘要 随着信息技术的高速发展&#xff0c;二十一世纪的网络技术和网络应用正在快速融入人们的生活&#xff0c;并且由于网络服务以及网络应用日渐普及&#xff0c;人们对于现在生活的需求也随之增长&#xff0c;而网上购物的便捷对人们的吸引力越来越大&#xff0c;购物网站可…

Redis 5种常用数据类型

目录 Redis简介 1.字符串 string 2.哈希 hash 3.列表 list 4.集合 set 5.有序集合 sorted set / zset Redis简介 Redis&#xff0c;全称Remote Dictionary Server&#xff0c;是一个开源的、内存中的数据结构存储系统。它可以用作数据库、缓存和消息中间件&#xff0c;支…

面向对象和面向过程

Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c;完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。 Python支持面向过程、面向对象、函数式编程等多种编程方式。而Java编程语言支持面向对象的编程方式&#xff0…

论文阅读Rolling-Unet,卷积结合MLP的图像分割模型

这篇论文提出了一种新的医学图像分割网络Rolling-Unet&#xff0c;目的是在不用Transformer的前提下&#xff0c;能同时有效提取局部特征和长距离依赖性,从而在性能和计算成本之间找到良好的平衡点。 论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/2…

leetcode LRU 缓存

leetcode: LRU 缓存 LRU 全称为 Least Recently Used&#xff0c;最近最少使用&#xff0c;常常用于缓存机制&#xff0c;比如 cpu 的 cache 缓存&#xff0c;使用了 LRU 算法。LRU 用于缓存机制时&#xff0c;关键的是当缓存满的时候有新数据需要加载到缓存的&#xff0c;这个…

streamlit markdown里支持latex公式显示

参考&#xff1a; https://docs.streamlit.io/develop/api-reference/write-magic/st.write https://discuss.streamlit.io/t/streamlit-markdown-a-streaming-markdown-component-with-latex-mermaid-table-code-support/72187 也有独立支持的st.latex 接口单独显示公司&…

Python 引入中文py文件

目录 背景 思路 importlib介绍 使用方法 1.导入内置库 importlib.util 2.创建模块规格对象 spec importlib.util.spec_from_file_location("example_module", "example.py") 3.创建模块对象 module importlib.util.module_from_spec(spec) …

远程工作岗位机会

电鸭&#xff1a;​​​​​​https://eleduck.com/?sortnew电鸭社区是具有8年历史的远程工作招聘社区&#xff0c;也是远程办公互联网工作者们的聚集地。在社区&#xff0c;我们进行有价值的话题讨论&#xff0c;也分享远程、外包、零活、兼职、驻场等非主流工作机会。「只工…

从客户端WebAPI视角下解读前端学习

API 应用程序接口&#xff08;API&#xff0c;Application Programming Interface&#xff09;是基于编程语言构建的结构&#xff0c;使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码&#xff0c;并提供一些简单的接口规则直接使用。 JavaScript VS 客户端 API VS 客…

麒麟Kylin | 操作系统的安装与管理

以下所使用的环境为&#xff1a;VMware Workstation 17 Pro、Kylin-Server-10-SP2-x86-Release-Build09-20210524 一、创建虚拟机 在VMware主机单击【创建新的虚拟机】 **在新建虚拟机向导中选择【自定义】&#xff0c;然后点击【下一步】 ** 保持默认选项&#xff0c;然后…

elasticsearch hanlp插件远程词典配置

elasticsearch hanlp插件远程词典配置 背景远程词典配置新增远程词典文件修改hanlp-remote.xml自动加载词典 远程词典测试 背景 在使用elasticsearch的过程中&#xff0c;总会遇到与分词相关的需求&#xff0c;这里将针对常用的elasticsearch hanlp&#xff08;后面统称为 es …

SpringBoot三层架构

目录 一、传统方式 二、三层架构 三、代码拆分 1、dao层 2、service层 3、control层 四、运行结果 一、传统方式 上述代码存在一定的弊端&#xff0c;在进行软件设计和软件开发中提倡单一责任原则&#xff0c;使代码的可读性更强&#xff0c;复杂性更低&#xff0c;可扩展性…

毕业答辩PPT:如何在短时间内高效准备?

提起PPT&#xff0c;大家的第一反应就是痛苦。经常接触PPT的学生党和打工人&#xff0c;光看到这3个字母&#xff0c;就已经开始头痛了&#xff1a; 1、PPT内容框架与文案挑战重重&#xff0c;任务艰巨&#xff0c;耗费大量精力。 2、PPT的排版技能要求高&#xff0c;并非易事…

R语言统计分析——数据集概念和数据结构

参考资料&#xff1a;R语言实战.第2版 1、数据集的概念 数据集通常是由数据构成的一个矩形数组&#xff0c;行表示观测&#xff0c;列表示变量。 不同行业对于数据集的行和列叫法不同。统计学称为观测&#xff08;observation&#xff09;和变量&#xff08;variable&#xff…

mysql数据库中触发器的使用

一、修改分隔符号 delimiter $$或者是//或者~~都行 二、创建触发器函数名称 create trigger 函数名 三、什么样的操作出发&#xff0c;操作那个表 after&#xff1a;.....之后触发 befor&#xff1a;.....之前触发 insert&#xff1a; 插入触发 update&#xff1a;修改被触发 d…

什么是隐马尔可夫模型?

文章目录 一、说明二、玩具HMM&#xff1a;5′拼接位点识别三、那么&#xff0c;隐藏了什么&#xff1f;四、查找最佳状态路径五、超越最佳得分对齐六、制作更逼真的模型七、收获 关键词&#xff1a;hidden markov model 一、说明 被称为隐马尔可夫模型的统计模型是计算生物学…

gridview自带编辑功能如何判断用户修改的值的合法性

在使用GridView的编辑功能更新值时&#xff0c;确保输入的值合法性是十分重要的。为了实现这一点&#xff0c;你可以在GridView的RowUpdating事件中加入代码来检查用户输入的值。如果发现输入的值不合法&#xff0c;你可以取消更新操作并向用户显示错误消息。下面是如何实现的步…

05眼动识别软件详情2波形优化-滤波

对应视频链接点击直达 01项目点击下载&#xff0c;可直接运行&#xff08;含数据库&#xff09; 05眼动识别软件详情2 对应视频链接点击直达期望的数据展示数据波形对比如何实现几种常用滤波介绍维纳滤波巴特沃斯滤波器中值滤波排序滤波 推荐 结语其他以下是废话 原始数据的波…

CorelDRAW Graphics Suite下载2024最新版-CorelDRAW2024详细安装步骤

CorelDRAW​​ Graphics Suite官方版是款很多用户在工作中都会使用的矢量图形设计工具。CorelDRAW Graphics Suite正式版采用量身定制的界面和无与伦比的定制功能&#xff0c;畅享无缝设计经验。并且CorelDRAW Graphics Suite还可以广泛应用于商标设计、标志制作、模型绘制、插…