WebApis学习笔记,第二节:高级语法

news2024/11/23 6:08:05

WebApis学习笔记,第二节:高级语法

一、JS组成

我们再回顾一下JS的组成:

ECMAScript:
·规定了js基础语法核心知识。
·比如:变量、分支语句、循环语句、对象等等

Web APIs :
·DOM 文档对象模型, 定义了一套操作HTML文档的API  (document  object model)
·BOM 浏览器对象模型,定义了一套操作浏览器窗口的API (browser object model)

在这里插入图片描述

前面我们简答的学习了DOM的相关语法,接下来我们看下BOM的语法:


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


【navigator\location\document\history\scree】

二、定时器:延迟函数与间歇函数

JavaScript 内置的一个用来让代码延迟执行的函数,叫 setTimeout

1、语法:
setTimeout(回调函数, 延迟时间)

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

2、注意:
延时函数需要等待,所以后面的代码先执行
返回值是一个正整数,表示定时器的编号

3、清除延时函数:
clearTimeout(timerId)
间歇函数 setInterval : 每隔一段时间就执行一次, , 平时省略window
//1、延迟函数
let timerId = setTimeout(() => {
  console.log("我是一个延迟函数");
}, 5000);

console.log("延迟函数需要等待,所以我先执行,等时间到了,它再执行");

console.log("timerId:" + timerId);

//清除延迟函数
//clearTimeout(timerId);
console.log("================================");

//2、间歇函数
let intervalTimerId = setInterval(() => {
  console.log("我是一个间歇函数");
}, 5000);

console.log("间歇函数也需要等待,所以我限制性,等时间到了,它再执行");

console.log("intervalTimerId:" + intervalTimerId);

//清除间歇函数
//clearInterval(intervalTimerId);

三、location对象

location (地址) 它拆分并保存了 URL 地址的各个组成部分, 它是一个对象
属性/方法说明
href属性,获取完整的 URL 地址,赋值时用于地址的跳转
search属性,获取地址中携带的参数,符号 ?后面部分
hash属性,获取地址中的啥希值,符号 # 后面部分
reload()方法,用来刷新当前页面,传入参数 true 时表示强制刷新
<a href="#download">下载</a>
<input class="reload" type="button" value="点我">
<script>
//测试访问路径:http://127.0.0.1:5500/location对象.html?keyword=abc#download

//1、href获取完整地址
console.log(location.href);

//2、search获取?号后面的地址
console.log(location.search);

//3、hash获取#号后面哈希值
console.log(location.hash);

//4、reload刷新页面
const clickBut = document.querySelector(".reload");
clickBut.addEventListener('click', function () {
  location.reload();//刷新页面
  location.reload(true);//强制刷新页面ctrl+f5
});
</script>

四、navigator对象

//navigator是获取浏览器相关信息的对象
console.log(navigator);
document.write(navigator.userAgent);
document.write("<br/>");
document.write(navigator.language);

五、history对象

history (历史)是对象,主要管理历史记录, 该对象与浏览器地址栏的操作相对应,如前进、后退等
方法作用
back()后退
forward()前进
go(参数)参数1是前进1步,-1是后退一步,以此类推
<body>
  <button class="forwardBtn">前进→</button>
  <button class="backBtn">←后退</button>
  <script>
    const forwardBtn = document.querySelector(".forwardBtn");
    const backBtn = document.querySelector(".backBtn");

    forwardBtn.addEventListener("click", () => {
      history.forward();
      // history.go(1);
    });

    backBtn.addEventListener("click", () => {
      history.back();
      // history.go(-1);
    });
  </script>
</body>

六、本地存储

本地存储,顾名思义就是将数据存储在本地浏览器中

好处:
1、页面刷新或者关闭不丢失数据,实现数据持久化
2、容量较大,sessionStorage和 localStorage 约 5M 左右

1、localStorage

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

以键值对的形式存储,并且存储的是字符串, 省略了window

语法:
1、localStorage.setItem(key,value)  存储数据
2、localStorage.getItem(key)  读取数据
3、localStorage.removeItem(key) 删除数据
<script>
    //使用localStorage将年龄存储在浏览器中
    localStorage.setItem("age", 18);
    localStorage.setItem("name", "lee");
    //从localStorage中获取年龄
    console.log(localStorage.getItem("age"));
    console.log("存储的类型是:" + (typeof localStorage.getItem("age")));
    console.log("存储的类型是:" + (typeof localStorage.getItem("name")));
    //清除localStorage
    localStorage.removeItem("age");
    //再次获取age
    console.log(localStorage.getItem("age"));
</script>
##结果:
  18
  存储的类型是:string
  存储的类型是:string
  null

2、sessionStorage

sessionStorage:数据短期保留在本地浏览器中,刷新页面,数据也不会丢失

特性:
1、用法跟localStorage基本相同
2、区别是:当页面浏览器被关闭时,存储在 sessionStorage 的数据会被清除

语法:
1、sessionStorage.setItem(key,value)  存储
2、sessionStorage.getItem(key) 获取
3、sessionStorage.removeItem(key) 删除
<script>
    //1、尝试获取下 上个练习存储的 localStorage 
    let name = localStorage.getItem("name");
    console.log("localStorage-name:" + name);

    //2、sessionStorage存储
    sessionStorage.setItem("home", "handan");
    sessionStorage.setItem("birthday", "2021-12-04");

    //3、sessionStorage查询
    console.log("home:" + sessionStorage.getItem("home"));
    console.log("home:" + typeof sessionStorage.getItem("home"));

    //4、sessionStorage删除
    sessionStorage.removeItem("home");
    console.log("home:" + sessionStorage.getItem("home"));
</script>
##结果:
localStorage-name:lee
home:handan
home:string
home:null

3、存储复杂数据类型

本地只能存储字符串,无法存储复杂数据类型.

解决方案:
1、需要将复杂数据类型转换成 JSON字符串,在存储到本地

语法:
1、JSON.stringify(复杂数据类型) //将对象转为JSON字符串  
2、JSON.parse(JSON字符串)  //将JSON字符串解析为对象
<script>
    //1、定义一个复杂数据类型
    let user = {
      "age": 18,
      "name": "lee",
      "home": "handan",
      sayHi: function () {
        console.log("hello lee");
      }
    }

    user.sayHi();

    //2、转换成字符串
    let userStr = JSON.stringify(user);

    //3、存储
    localStorage.setItem("user", userStr);
    sessionStorage.setItem("user", userStr);

    //4、查询
    console.log(localStorage.getItem("user"));
    console.log(sessionStorage.getItem("user"));

    //5、转换
    let newUser = JSON.parse(localStorage.getItem("user"));
    console.log(newUser);
    console.log(newUser.age);
    console.log(newUser.name);
    console.log(newUser.home);
    console.log(newUser.sayHi());//证明本地存储 不存函数
</script>

六、数组

1、map方法

map 可以遍历数组处理数据,并且返回新的数组
//1、map创建新的数组
let myArr = ["1", "2", 3];
const newArr = myArr.map((el, index) => {
  console.log(el + "  " + index);
  return el + 1;
});
console.log(myArr);
console.log(newArr);
console.log("-------------------");
#结果:
1  0
2  1
3  2
['1', '2', 3]
['11', '21', 4]

2、join方法

join() 方法用于把数组中的所有元素转换一个字符串
//2、join将所有的内容拼接为一个字符串
let myStr1 = myArr.join();
console.log(myStr1);
let myStr2 = myArr.join("");
console.log(myStr2);
let myStr3 = myArr.join("β");
console.log(myStr3);
#结果:
1,2,3
123
1β2β3

七、正则表达式

正则表达式(Regular Expression)是一种字符串匹配的模式(规则)

使用场景: 验证表单、过滤敏感词汇等

语法:
1、const reg =  /表达式/          //定义规则

·其中/ /是正则表达式字面量
·正则表达式也是对象

2、test()     //使用正则

·test()方法 用来查看正则表达式与指定的字符串是否匹配
·如果正则表达式与指定的字符串匹配 ,返回true,否则false

3、replace(表达式,待替换的文本)  //字符串替换
· i 代表ignore,正则匹配时,字母不区分大小写
· g 代表global,匹配所有满足表达式的结果,如果没有g,默认只匹配第一个
· m 执行多行匹配
概念:

1、普通字符
·大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。
·普通字符只能够匹配字符串中与它们相同的字符。

2、元字符
·是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。
·比如,规定用户只能输入英文26个英文字母,换成元字符写法: /[a-z]/
      普通字符写法只能是:/[abcdefghijklmnopqrstuvwxyz]/
·[abc] 查找方括号内的任何字符
·[0-9] 查找任何0~9的数字
·(z|y) 查找z或者y

3、边界符
·边界符(位置符)用来提示字符所处的位置
· ^ 表示匹配行首的文本
· $ 表示匹配行尾的文本
· 如果^和$在一起表示必须是精确匹配

4、量词
· *重复零次或更多次
· +重复一次或更多次
· ?重复零次或一次
· {n}重复n次
· {n,}重复n次或更多次
· {n,m}重复n~m次

5、范围
·[abc] 匹配包含的单个字符,也就是只有a||b||c 这三个单字符返回true
·[a-z] a到z 26个英文字母
·[^a-z] 取反,匹配除了小谢字母以外的字符

6、字符类
· \d 匹配0-9之间的任意数字  等同于[0-9]
· \D 匹配除0-9以外的字符,等同于[^0-9]
· \w 匹配任意字母、数字、下划线,等同于[a-z0-9A-Z_]
· \W 匹配除字母、数字、下划线以外的字符,等同于[^a-z0-9A-Z_]
· \s 匹配空格(包括换行符、制表符、空格符等),等同于[\t\r\n\v\f]
· \S 匹配非空格的字符,等同于[^\t\r\n\v\f]
<script>
    //1、普通字符--有a~z之间的字符
    const reg1 = /[abcdefghijklmnopqrstuvwxyz]/;
    console.log(reg1.test("hello")); //true
    console.log(reg1.test("你好")); //false
    console.log(reg1.test("你好abc你好")); //true

    console.log("-------------");
    //2、元字符--有a~z之间的字符
    const reg2 = /[a-z]/;
    console.log(reg2.test("hello"));//true
    console.log(reg2.test("你好")); //false
    console.log(reg2.test("你好abc你好")); //true

    const reg2_1 = /(abc|123)/;
    console.log(reg2_1.test("ab1"));//false
    console.log(reg2_1.test("abc"));//true
    console.log(reg2_1.test("123"));//true

    console.log("-------------");
    //3、边界符
    const reg3 = /^a/;
    console.log(reg3.test("abcd"));//true
    console.log(reg3.test("dcba"));//false

    const reg4 = /a$/;
    console.log(reg4.test("abcd"));//false
    console.log(reg4.test("dcba"));//true

    const reg5 = /^abc$/;
    console.log(reg5.test("abbbbbbc"));//false
    console.log(reg5.test("abc"));//true


    console.log("-------------");
    //5、数量
    // * 重复次数 >= 0 次
    const reg6 = /^w*$/
    console.log(reg6.test(''))  // true
    console.log(reg6.test('w'))  // true
    console.log(reg6.test('ww'))  // true
    console.log('-----------------------')

    //+ 重复次数 >= 1 次
    const reg7 = /^w+$/
    console.log(reg7.test(''))  // false
    console.log(reg7.test('w'))  // true
    console.log(reg7.test('ww'))  // true
    console.log('-----------------------')

    // ? 重复次数  0 || 1 
    const reg8 = /^w?$/
    console.log(reg8.test(''))  // true
    console.log(reg8.test('w'))  // true
    console.log(reg8.test('ww'))  // false
    console.log('-----------------------')


    // {n} 重复 n 次
    const reg9 = /^w{3}$/
    console.log(reg9.test(''))  // false
    console.log(reg9.test('w'))  // flase
    console.log(reg9.test('ww'))  // false
    console.log(reg9.test('www'))  // true
    console.log(reg9.test('wwww'))  // false
    console.log('-----------------------')

    // {n,} 重复次数 >= n 
    const reg10 = /^w{2,}$/
    console.log(reg10.test(''))  // false
    console.log(reg10.test('w'))  // false
    console.log(reg10.test('ww'))  // true
    console.log(reg10.test('www'))  // true
    console.log('-----------------------')

    // {n,m}   n =< 重复次数 <= m
    const reg11 = /^w{2,4}$/
    console.log(reg11.test('w'))  // false
    console.log(reg11.test('ww'))  // true
    console.log(reg11.test('www'))  // true
    console.log(reg11.test('wwww'))  // true
    console.log(reg11.test('wwwww'))  // false


    console.log("=====================");
    //6、字符类
    const reg12 = /\d{3}/; //包含匹配任意连续3个数字
    console.log(reg12.test("abc")); //false
    console.log(reg12.test("123")); //true
    console.log(reg12.test("a12a34a")); //false
    console.log(reg12.test("a1234a")); //true
    console.log("---------------------");

    const reg13 = /\D{3}/; //包含任意连续3个非数字字符
    console.log(reg13.test("ab123c")); //false
    console.log(reg13.test("abc123c")); //true

    console.log("--------------------");
    const reg14 = /\w{3}/; //包含任意连续三个字母、数字、下划线
    console.log(reg14.test("a71&"));//true
    console.log(reg14.test("a_@12"));//false

    console.log("===============================");
    //7、判断是否是一个邮箱
    const reg15 = /^\w{1,}@(167||qq||127).com$/;
    console.log(reg15.test("james_taylor@127.com"));//true
</script>

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

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

相关文章

【ubuntu24.04.1最简洁安装方案】

我的电脑配置&#xff1a; 128GB固态硬盘&#xff0c;1TB 机械硬盘&#xff0c;我把整个 windows 系统全噶掉了&#xff0c;只安装ubuntu24.04.1一个Linux系统噶windows系统&#xff0c; 推荐使用 DiskGenius这个工具&#xff0c;好用&#xff0c;但是也要弄明白了再用啊&#…

【spring的底层原理】Bean的生命周期

文章目录 什么是Bean的生命周期Bean的生命周期可以分为几个步骤Bean的定义阶段加载BeanDefinition中指定的类实例化前&#xff08;可选&#xff09;实例化属性注入Aware接口回调BeanPostProcessor前置处理初始化初始化前&#xff08;可选&#xff09;初始化初始化后&#xff08…

全面前端显示:鹅成熟与否识别

1.背景意义 研究背景与意义 随着生态保护意识的增强和生物多样性的重要性日益凸显&#xff0c;水鸟尤其是加拿大鹅的保护与管理成为了生态学研究的一个重要领域。加拿大鹅在北美地区广泛分布&#xff0c;其种群数量的变化不仅反映了生态环境的健康状况&#xff0c;也对当地生…

label studio+sam实现半自动标注

1、主要参考&#xff1a;https://github.com/open-mmlab/playground/tree/main/label_anything 这里提醒大家一点&#xff0c;有人使用过程中&#xff0c;出现自动标注无反应&#xff0c;就是操作步骤出现了问题&#xff01;一定记住按这个顺序操作&#xff01;&#xff01;&a…

Python爬虫案例八:抓取597招聘网信息并用xlutils进行excel数据的保存

excel保存数据的三种方式&#xff1a; 1、pandas保存excel数据&#xff0c;后缀名为xlsx; 举例&#xff1a; import pandas as pddic {姓名: [张三, 李四, 王五, 赵六],年龄: [18, 19, 20, 21],住址: [广州, 青岛, 南京, 重庆] } dic_file pd.DataFrame(dic) dic_file…

Hutool工具类生成二维码

1、引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutoo…

Java 基于SpringBoot+vue框架的老年医疗保健网站

大家好&#xff0c;我是Java徐师兄&#xff0c;今天为大家带来的是Java Java 基于SpringBootvue框架的老年医疗保健网站。该系统采用 Java 语言开发&#xff0c;SpringBoot 框架&#xff0c;MySql 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性强 &#xff0c;可供大…

华为FusionCube 500-8.2.0SPC100 实施部署文档

环境&#xff1a; 产品&#xff1a;FusionCube 500版本&#xff1a;8.2.0.SPC100场景&#xff1a;虚拟化基础设施平台&#xff1a;FusionCompute两节点 MCNA * 2硬件部署&#xff08;塔式交付场景&#xff09;免交换组网&#xff08;配置AR卡&#xff09; 前置准备 组网规划 节…

社团管理新体验:SpringBoot技术

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了社团管理系统的开发全过程。通过分析社团管理系统管理的不足&#xff0c;创建了一个计算机管理社团管理系统的方案。文章介绍了社团管理系统的系统分析部分&…

SSM之Bean

前言 这一节讲bean 1.初始spring 点projects Framework是spring的基础 spring官网 这三个主流 2. 系统架构 3. 核心概念 4. Ioc入门案例 其中Dao就是我们原来管理数据库的&#xff0c;service就是业务层 这个代码很简单 要交给spring管理&#xff0c;首先要有一个配置文…

Spring循环依赖如何解决的?

一、什么是循环依赖 循环依赖&#xff1a;说白是一个或多个对象实例之间存在直接或间接的依赖关系&#xff0c;这种依赖关系构成了构成一个环形调用。 第一种情况&#xff1a;自己依赖自己的直接依赖 第二种情况&#xff1a;两个对象之间的直接依赖 第三种情况&#xff1a;多个…

Mac vscode 激活列编辑模式

列编辑模式在批量处理多行文本时&#xff0c;非常有效&#xff0c;但 vscode 默认情况下&#xff0c;又没有激活&#xff0c;因此记录一下启动方法&#xff1a; 激活列编辑模式 然后就可以使用 Alt&#xff08;Mac 上是 Option 或 Command 键&#xff09; 鼠标左键 滑动选择了…

【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)

一、 密码应用安全性评估方案 &#xff08;一&#xff09; 密码应用测评工作思路 1.1.1. 测评准备活动的主要任务 1.1.2. 测评准备活动的输出文档 1.2. 方案编制活动 1.2.1. 方案编制活动的主要任务 1.2.2. 方案编制活动的输出文档 1.3. 现场预评估活动 1.3.1. 现场测评…

docker run m3e 配置网络,自动重启,GPU等 配置渠道要点

启动命令&#xff1a; docker run -d --restart always -p 6008:6008 --gpus all --name m3e --network fastgpt_fastgpt stawky/m3e-large-api 配置渠道m3e base url要像我这样填写才行&#xff0c;不然回出问题 模型要选m3e 密钥填&#xff1a;sk-aaabbbcccdddeeefffggghhhi…

OceanBase Shell开放内核运维接口,运维更便捷

DBA在日常业务中面临着繁琐的运维管理任务&#xff0c;亟需高效的工具和灵活的解决方案帮助他们简化操作、提升效率。因此&#xff0c;命令行操作和维护工具&#xff08;CLI工具&#xff09;&#xff0c;因其高效、灵活、可远程管理以及技术深度等特点&#xff0c;成为DBA和开发…

基于MATLAB的混沌序列图像加密程序

设计目的 图像信息生动形象&#xff0c;它已成为人类表达信息的重要手段之一&#xff0c;网络上的图像数据很多是要求发送方和接受都要进行加密通信&#xff0c;信息的安全与保密显得尤为重要&#xff0c;因此我想运用异或运算将数据进行隐藏&#xff0c;连续使用同一数据对图…

SMMU软件指南操作之翻译过程概述

安全之安全(security)博客目录导读 下图展示了每个传入事务&#xff08;transaction&#xff09;所经过的简化过程。本节描述了顶层翻译过程。 一个传入事务遵循以下步骤&#xff1a; 1. 如果 SMMU 被全局禁用&#xff0c;事务将直接通过 SMMU 而不进行任何地址改变。全局属性…

WEB-通用漏洞SQL注入CTF二次堆叠DNS带外

知识点&#xff1a; 1、数据库堆叠注入 根据数据库类型决定是否支持多条语句执行 数据库支持多条语句执行就是堆叠&#xff0c;如&#xff1a; 2、数据库二次注入 应用功能逻辑涉及上导致的先写入后组合的注入 3、数据库Dnslog注入 解决不回显&#xff08;反向连接&#…

基于 DRNN 神经网络整定的 PID 解耦控制

1. 基本原理 DRNN&#xff08;Dynamic Recurrent Neural Network, 动态递归神经网络&#xff09;是一种带有时间反馈的神经网络&#xff0c;能够建模系统的动态特性&#xff0c;适用于非线性、多变量、时变系统的控制。结合 PID 解耦控制&#xff0c;利用 DRNN 进行动态建模和…