Web API —— BOM 学习(完结)

news2024/12/22 18:14:19

目录

一、BOM 介绍

二、Window 对象

(一)基本介绍

(二)定时器 —— 延时函数

1.语法

2.清除时间函数

3.和 interval 间歇函数的区别

(三)JS 执行机制

1.介绍

2.同步任务

3.异步任务

4.执行过程

(四)location 对象

1.location.href

2.location.search

3.location.hash 

4.reload 方法

(五)navigator 对象 

(六)history 对象 

三、本地存储

(一)localStorage

1.介绍

2.语法

(二)sessionStorage

(三)存储复杂数据类型

1.把复杂数据类型转换成 JSON 字符串

四、数组中的别的渲染方法

(一)map() 方法

(二)join() 方法 

(三)map() 方法 + join() 方法 渲染页面

五、正则表达式

(一)介绍

(二)语法

1.定义正则表达式的语法

2.判断是否有符合规则的字符串

3.检测符合规则的字符串

(三)元字符

1.介绍

2.分类

边界符:

量词:

字符类;

预定义类:

修饰符:

练习:5s 后自动跳转

练习:密码正确格式

练习:敏感词隐藏练习


一、BOM 介绍

BOM 是浏览器对象模型,是整个浏览器,也可以说  BOM 里面包含 DOM

主要对最大的对象 Window 对象操作

二、Window 对象

(一)基本介绍

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

document 是 window 里面的 document = window.document

以前的很多语法全称应该是下面这样的

ps:通过 var 定义的变量、函数最后都会变成 window 的属性和方法

window 的对象和函数在调用是可以省略前面的 window


<body>
  <script>
    window.document.querySelector()
    function fn() {
      console.log(1)
    }
    window.fn()
    var num = 10
    console.log(window.num)
  </script>
</body>

(二)定时器 —— 延时函数

屏幕中出现广告显示过几秒关闭 然后不再出现了 就可以用延时函数

我们用 JavaScript 内置的一个让代码延时执行的函数 setTimeout()

1.语法

setTimeout(回调函数, 等待的毫秒数) ,这个函数只执行一次,理解成让代码延时执行

2.清除时间函数
<body>
  <script>
    let timer = setTimeout(function () {
      console.log('时间到了')
      clearTimeout(timer)
    },1000)
  </script>
</body>
3.和 interval 间歇函数的区别

对比:执行次数

延时函数只执行一次

间歇函数每隔一段时间执行一次,必须手动清除才能停下

(三)JS 执行机制

1.介绍

JS 语言最大的特点是单线程,同一个时间只能做一件事

html5 提出 Web Worker 标准,允许 js 脚本创建多个线程,因此 js 中出现了 同步 和 异步

同步:前一个任务完成再去做下一个,程序的执行顺序和排列顺序一致,是同步的

异步:在做一件事的同时也能去做另一件事

本质区别:在流水线上的各个流程的执行顺序不同

2.同步任务

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

3.异步任务

耗时的任务,异步任务是单独放到任务队列中去,例如定时器

4.执行过程

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

2.异步任务放到任务队列中去

3.当执行栈里面的所有同步任务执行完成,然后再读取任务队列中的异步任务到执行栈中进行执行,然后循此以往读取执行,我们称这个循环过程为事件循环(event loop)

下面依次输出 哈哈 我们 人们

<body>
  <script>
    console.log('哈哈')
    setTimeout(function () {
      console.log('人们')
    }, 0)
    console.log('我们')
  </script>
</body>

(四)location 对象

1.location.href

它是对象类型,全称是 Window.location = location

它拆分并保存了 URL 地址的各个组成部分,可用于自动跳转页面  不用链接跳转 用 js

比如注册页面注册成功自动跳转页面

<body>
  <script>
   location.href = 'http://www.baidu.com'
  </script>
</body>
2.location.search

search 属性获得 地址中携带的参数,就是是地址 ?后面的部分

假如是表单获得的就是表单里的信息(表单必须有 name 属性)

<body>
  <script>
    console.log(location.search)
  </script>
</body>
3.location.hash 

获得网页地址 #后面的部分 哈希

<body>
  <a href="#/my">我的</a>
  <a href="#/friend">朋友</a>
  <a href="#/download">下载</a>
  <script>
    console.log(location.hash)
  </script>
</body>
4.reload 方法

 location 的 reload 函数 用于页面刷新 如果里面有 true 则是强制刷新

<body>
 <button class="reload">刷新</button>
  <script>
   const reload = document.querySelector('.reload')
   reload.addEventListener('click',  function(){
    location.reload()
   })
  </script>
</body>

(五)navigator 对象 

数据类型是对象,该对象记录了浏览器自身的相关信息

userAgent 这个属性很重要

用来检查浏览器的版本和平台

如果是安卓,苹果端跳转到另一个界面,不用自己写,直接利用这个属性就行

(六)history 对象 

数据类型是对象,管理历史记录,该对象与浏览器地址栏的操作相对如应后退前进,历史记录等功能

常用属性和方法

back() 后退

forward() 前进功能

go(参数) 前进后踢都能干 1 是前进一个页面 -1就是后退一个界面

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

三、本地存储

类似于数据库,但是存在内存中的数据 一刷新就没了,我们因此把数据存在用户浏览器中,本地建一个小仓库

设置读取方便,刷新页面不丢失数据,容量较大

(一)localStorage

1.介绍

可以将数据永久存储再本地(用户电脑中),除非手动删除,否则关闭页面也有

可以多窗口共享(同一浏览器共享)

以键值对的形式存储 本地存储只能存自负床,会自动转成字符串,注意一下

键永远带引号

2.语法

就是数据的增删改查

代码写完后在 f12 中查看 application 选项然后查看本地存储就能看见存储的数据

具体操作如下:

<body>
  <script>
    localStorage.setItem('uname', '一个人')
    console.log(localStorage.getItem('uname'))
    localStorage.removeItem('uname')
    localStorage.setItem('uname', '三个人')
  </script>
</body>

(二)sessionStorage

特性:这个不同的地方是浏览器窗口一关就没了,同一个页面下可以共享,键值对存储,用法和 localStorage 基本相同

获取数据:

 localStorage.getItem(key,)

(三)存储复杂数据类型

因为里面是以字符串类型存储的,所以复杂数据类型无法直接使用

办法:把复杂数据类型转换成 JSON 字符串,再存储到本地

1.把复杂数据类型转换成 JSON 字符串

语法:JSON.stringify(转换对象)

JSON 不管属性还是值都有引号 而且都是双引号,称之为 JSON 对象

<body>
  <script>
    const obj = {
      uname: '一个人',
      age: 18,
      gender: '女'
    }
    localStorage.setItem('obj',JSON.stringify(obj)) 
    console.log(obj)
  </script>
</body>

 2. JSON 字符串转换成 对象

利用 parse 函数

<body>
  <script>
    const obj = {
      uname: '一个人',
      age: 18,
      gender: '女'
    }
    localStorage.setItem('obj',JSON.stringify(obj)) 
    console.log(JSON.parse(localStorage.getItem('obj')))
  </script>
</body>

四、数组中的别的渲染方法

(一)map() 方法

用于拼接字符串,不用之前的方法了,给数组中的所有元素拼接相同的文字

可以进行迭代数组,遍历数组,返回新的数组

也称为映射 map() 有返回值 ,forEach 没有返回值

返回数组元素 console.log(ele)

返回数组下标 console.log(index)

<body>
  <script>
    const arr = ['red', 'blue', 'yellow']
    const newarr = arr.map(function (ele, index) {
      return ele + '颜色'
    })
    console.log(newarr)
  </script>
</body>

(二)join() 方法 

join()方法用于把数组中的所有元素转换一个字符串,就是把数组中的所有元素拼接成一个字符串

括号里面规定那些元素变成一个字符串以后以什么符号分隔

如果只有一个空引号,就是没有分隔都连在一起。

如果只有小括号就是以逗号分隔

下面输出:red颜色blue颜色yellow颜色

<body>
  <script>
    const arr = ['red', 'blue', 'yellow']
    const newarr = arr.map(function (ele, index) {
      return ele + '颜色'
    })
    console.log(newarr.join(''))
  </script>
</body>

(三)map() 方法 + join() 方法 渲染页面

1. map() 遍历数组处理数据生成 tr 返回一个数组

2.通过 join() 方法把map() 返回的数组转换为字符串

3.把字符串通过 innerHMTL 赋值给 tbody

五、正则表达式

(一)介绍

用于匹配字符串中字符组合的模式,在 js 中 正则表达式也是对象‘

用来查找替换符合正则表达式的文本

使用场景:

匹配:验证表单用户名只能输入英文字母,数字或下划线,昵称可以输入中文

替换:过滤敏感词等

提取:字符串中提取我们想要的部分

(二)语法

定义规则,然后查找

1.定义正则表达式的语法

const 变量名 = /表达式/     /    / 是正则表达式的字面量

2.判断是否有符合规则的字符串

test() 方法 查看正则表达式和指定的字符串是否匹配

被定义的规则.test(被检测的字符串)

返回 true 或者 false

<body>
  <script>
   const str = '我要学前端'
   const reg =/前端/
   console.log(reg.test(str))
  </script>
</body>
3.检测符合规则的字符串

exec() 方法 在一个指定字符串中执行一个搜索匹配

返回一个数组

<body>
  <script>
    const str = '我要学前端'
    const reg = /前端/
    console.log(reg.exec(str))
  </script>
</body>

(三)元字符

1.介绍

如果是具体的字符就是普通字符 比如 ’123‘ ’abc‘

但是我们如果规定只能输入英文字母 就得输入abcdeghijklmn。。。26个英文字母很不方便

我们可以用元字符写法 [a-z] 提高灵活性

2.分类
边界符:

规定什么开头什么结尾,就是设置密码时必须以字母开头那种

^ :以谁开始

$:以谁结束

<body>
  <script>
   console.log(/^你/.test('我和你是人'))
   console.log(/你/.test('你和我是人'))
  </script>
</body>

 注意:如果两个符号都出现,这种情况叫精确匹配,必须完全和前面的内容一致,不是开头结尾一样就行,下面的例子输出就是 false

<body>
  <script>
   console.log(/^你$/.test('你你你'))
  </script>
</body>
量词:

设置某个模式的出现次数

*:代表出现0次或者多次 只能是相同的文字重复

+:重复1次 或者多次

?:重复0次或1次

{n}::重复 n 次 写几就出现几次

{n,}::重复 n 次 或更多次

{n,m}::重复n 到 m次

注意:逗号左右两边千万不能有空格!!!

这下面就返回 true

<body>
  <script>
   console.log(/^你*$/.test('你你你'))
  </script>
</body>
字符类;

a - z 表示26个小写字母

A - Z 表示26个大写字母

0 - 9 表示数字 0- 9

注意可以 三个组合使用 console.log(/^[a-zA-Z0-9$]/.test('p')) 这样就只能输入 大小写字母和数字

只要显示 abc 中的任何一个字符 都返回 true

下面返回 true 因为 andy 里面有 a 有 abc 中的一个就行

后面的大括号里面填入数字几 就能出现方括号里面的东西几次

<body>
  <script>
    console.log(/^[abc]{2}$/.test('andy'))
  </script>
</body>

腾讯 qq 号 :^[1-9][0-9]{4,}$(腾讯qq号从10000开始)

^写在方括号里面是取反的意思 在外面就是以什么开头的意思

 . 表示除了换行都行

预定义类:

\d : 0 - 9

\D :除了 0 - 9

\w :匹配任意的字母数字下划线

\s: 匹配空格

\S :匹配非空格的字符

修饰符:

用于区分是否大小写 是否支持多行匹配等

语法:/表达式/修饰符

主要有两种

i :是 ignore 的缩写 ,正则匹配时不区分大小写

g :是 global 的缩写,匹配所有满足正则表达式的结果 全局查找

<body>
  <script>
    console.log(/^java$/.test('java'))
    console.log(/^java$/i.test('JAVA'))
    console.log(/^java$/i.test('Java'))
  </script>
</body>

replace :替换

下面是一个全局匹配替换

<body>
  <script>
    const str = 'java是一门编程语言,学完JAVA工资很高'
    const re = str.replace(/java/ig,'前端')
    console.log(re)
  </script>
</body>

练习:5s 后自动跳转

界面展示:

代码部分:

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div {
      width: 200px;
      height: 200px;
      background-color: pink;
    }
  </style>
</head>
<a href="http://www.baidu.com">再过<span>5</span>秒钟跳转页面</a>

<body>
  <script>
    const a = document.querySelector('a')
    let i = 5
    setInterval(function () {
      i--
      a.innerHTML = `再过<span>${i}</span>秒钟跳转页面`
      if (i === 0) {
        clearInterval()
        location.href = 'http://www.baidu.com'
      }
    }, 1000)
  </script>
</body>

</html>

练习:密码正确格式

界面展示:

代码部分:

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .right {
      background-color: green;
    }

    .error {
      background-color: red;
    }
  </style>
</head>

<body>
  <input type="text">
  <span></span>
  <script>
    const reg = /^[a-zA-Z0-9-_]{6,16}$/
    const input = document.querySelector('input')
    const span = input.nextElementSibling
    input.addEventListener('blur', function () {
      if (reg.test(this.value)) {
        span.innerHTML = '输入正确'
        span.className = 'right'
      } else {
        span.innerHTML = '输入错误'
        span.className = 'error'
      }
    })
  </script>
</body>

</html>

练习:敏感词隐藏练习

展示部分:

代码部分:

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

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

<body>
  <textarea name="" id="" cols="30" rows="10"></textarea>
  <button>发布</button>
  <div></div>
  <script>
    const tx = document.querySelector('textarea')
    const btn = document.querySelector('button')
    const div = document.querySelector('div')
    btn.addEventListener('click', function () {
      div.innerHTML = tx.value.replace(/黄色|敏感/g, '**')
      tx.value = ''
    })
  </script>
</body>

</html>

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

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

相关文章

FPGA之组合逻辑与时序逻辑

数字逻辑电路根据逻辑功能的不同&#xff0c;可以分成两大类&#xff1a;组合逻辑电路和时序逻辑电路&#xff0c;这两种电路结构是FPGA编程常用到的&#xff0c;掌握这两种电路结构是学习FPGA的基本要求。 1.组合逻辑电路 组合逻辑电路概念&#xff1a;任意时刻的输出仅仅取决…

微信小程序使用Vant组件库流程

目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。这样开发原生微信小程序的会方便很多。 官方网址&#xff1a;Vant Weapp - 轻量、可靠的小程序 UI 组件库 步骤一 通过 npm 安装 npm i vant/weap…

建立动态MGRE隧道的配置方法

目录 一、实验拓扑 1.1通用配置 1.1.1地址配置 1.1.2静态缺省指向R5&#xff0c;实现公网互通 1.1.3MGRE协议配置 1.1.4配置静态 二、Shortcut方式 三、Normal方式&#xff08;非shortcut&#xff09; 四、总结 一、实验拓扑 下面两种配置方法皆使用静态方式 1.1通用配…

C#进阶-反射的详解与应用

一、反射的概念 反射是.NET框架提供的一个功能强大的机制&#xff0c;它允许程序在运行时检查和操作对象的类型信息。通过使用反射&#xff0c;程序可以动态地创建对象、调用方法、访问字段和属性&#xff0c;无需在编译时显式知道类型信息。在.NET中&#xff0c;所有类型的信…

代码随想录训练营第58天 | LeetCode 739. 每日温度、​​​​​​LeetCode 496.下一个更大元素 I

目录 LeetCode 739. 每日温度 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;单调栈&#xff0c;你该了解的&#xff0c;这里都讲了&#xff01;LeetCode:739.每日温度_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 496.下一个更大元素 I 文…

【pytest、playwright】构建POM项目,以及解决登录问题,allure环境问题

目录 前言 1、文件目录 2、安装依赖 3、POM项目实战-案例&#xff1a;打开指定页面 目录结构&#xff1a; pages中的代码&#xff1a; cases中的代码&#xff1a; 4、解决登录问题 问题&#xff1a; 解决方案&#xff1a; 获取登录的用户信息&#xff08;cookie&a…

静态住宅IP优缺点,究竟要怎么选?

在进行海外 IP 代理时&#xff0c;了解动态住宅 IP 和静态住宅 IP 的区别以及如何选择合适的类型非常重要。本文将介绍精态住宅 IP 特点和&#xff0c;并提供选择建议&#xff0c;帮助您根据需求做出明智的决策。 静态住宅 IP 的特点 静态住宅 IP 是指 IP 地址在一段时间内保…

[C++]内联函数(内联函数的概念,内联函数的特性,内联函数与宏的区别)

一、内联函数的概念 以inline修饰的的函数叫内联函数&#xff0c;编译时C编译器会在调用内联函数的位置将内联函数展开&#xff0c;内联函数没有调用函数参数压栈的开销&#xff0c;内联函数可以提高程序的运行效率。 例子&#xff1a; 没有使用内联函数 使用内联函数&#xff…

STM32技术打造:智能考勤打卡系统 | 刷卡式上下班签到自动化解决方案

文章目录 一、简易刷卡式打卡考勤系统&#xff08;一&#xff09;功能简介原理图设计程序设计 哔哩哔哩&#xff1a; https://www.bilibili.com/video/BV1NZ421Y79W/?spm_id_from333.999.0.0&vd_sourcee5082ef80535e952b2a4301746491be0 一、简易刷卡式打卡考勤系统 &…

UE4_旋转节点总结一

一、Roll、Pitch、Yaw Roll 围绕X轴旋转 飞机的翻滚角 Pitch 围绕Y轴旋转 飞机的俯仰角 Yaw 围绕Z轴旋转 飞机的航向角 二、Get Forward Vector理解 测试&#xff1a; 运行&#xff1a; 三、Get Actor Rotation理解 运行效果&#xff1a; 拆分旋转体测试一&a…

警惕垃圾邮件,伪造法院传真传播Sodinokibi勒索病毒

Sodinokibi勒索病毒在国内首次被发现于2019年4月份&#xff0c;2019年5月24日首次在意大利被发现&#xff0c;在意大利被发现使用RDP攻击的方式进行传播感染&#xff0c;这款病毒被称为GandCrab勒索病毒的接班人&#xff0c;在GandCrab勒索病毒运营团队停止更新之后&#xff0c…

Can‘t resolve ‘mockjs‘ in ‘......

问题场景&#xff1a; 未从根本目录打开项目在运行npm run serve 后报错&#xff1a;Parsing error: No Babel config file detected for...... 解决方法&#xff1a;在终端 cd ./含有package.json的文件夹/ npm run serve 此时在加载到70%之后报错 Cant resolve mockjs in .…

政安晨:【Keras机器学习实践要点】(四)—— 顺序模型

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 介绍 Keras是一个用于构建和训练深度学习模…

Docker搭建LNMP环境实战(05):CentOS环境安装Docker-CE

前面几篇文章讲了那么多似乎和Docker无关的实战操作&#xff0c;本篇总算开始说到Docker了。 1、关于Docker 1.1、什么是Docker Docker概念就是大概了解一下就可以&#xff0c;还是引用一下百度百科吧&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以…

初探Notion安装与使用

笔记工具哪家强&#xff0c;有道云笔记&#xff0c;印象笔记&#xff0c;记事本&#xff0c;notion 第一步、下载与安装 本次选择是window版本&#xff0c;下载地址【Notion官网】 版本为Notion Setup 3.3.0&#xff0c;软件大小74.3M&#xff0c;官网如下图所示。 进入登录…

STM32之HAL开发——DMA转运串口数据

DMA功能框图&#xff08;F1系列&#xff09; 如果外设要想通过 DMA 来传输数据&#xff0c;必须先给 DMA 控制器发送 DMA 请求&#xff0c; DMA 收到请求信号之后&#xff0c;控制器会给外设一个应答信号&#xff0c;当外设应答后且 DMA 控制器收到应答信号之后&#xff0c;就会…

[深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现四

【简单介绍】 经过精心设计和深度整合&#xff0c;我们成功推出了这款融合了先进目标检测算法YOLOv8与高效PyQt5界面开发框架的目标检测GUI界面软件。该软件在直观性、易用性和功能性方面均表现出色&#xff0c;为用户提供了高效稳定的操作体验。 在界面设计方面&#xff0c;…

1.5T数据惨遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件93起&#xff0c;近三周攻击数量呈现持平状态。 本周Lockbit3.0是影响最严重的勒索家族&#xff0c;Blacksuit和Ransomhub恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧是影响最严重的勒索家族&#xff0c;需要注意防范。 …

MT6762_联发科MTK6762安卓核心板规格参数

MTK6762核心板是一款集成了蓝牙、fm、wlan和gps模块的高度集成基带平台&#xff0c;为LTE/LTE-A和C2K智能手机应用程序提供支持。该安卓核心板集成了ARM Cortex-A53处理器&#xff0c;工作频率可达2.0GHz&#xff0c;并且还集成了功能强大的多标准视频编解码器。除此之外&#…

如何区分模型文件是稳定扩散模型和LORA模型

区分模型文件是否为稳定扩散模型&#xff08;Stable Diffusion Models&#xff09;或LORA模型&#xff08;LowRank Adaptation&#xff09;通常需要对模型的结构和内容有一定的了解。以下是一些方法来区分这两种模型文件&#xff1a; 1. 文件格式和结构 稳定扩散模型&#xff1…