从零开始学习 JS APL(五):完整指南和实例解析

news2024/9/25 9:39:44

目录

学习目标:

学习内容:

学习时间:

学习内容:

Window对象:

定时器-延时函数:

JS 执行机制:

location对象:

本地存储:

本地存储分类- localStorage:

 存储复杂数据类型:

综合案例:

​编辑

数组中map方法:

数组中join方法:


学习目标:

依托 BOM 对象实现对历史、地址、浏览器信息的操作或获取
具备利用本地存储实现学生信息表案例的能


学习内容:

Window对象
本地存储
综合案例


学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习内容:

Window对象:

BOM(Browser Object Model ) 是浏览器对象模型


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

  1. window.alert():显示一个警告框,带有一条指定的消息和一个确认按钮。
  2. window.prompt():显示一个提示框,带有一条指定的消息、一个文本输入域和一个确认按钮。
  3. window.confirm():显示一个确认框,带有一条指定的消息、一个确认按钮和一个取消按钮。
  4. window.open():打开一个新的浏览器窗口或标签页。
  5. window.close():关闭当前的浏览器窗口或标签页。
  6. window.location:表示当前窗口的URL地址,可以用来获取或设置当前页面的URL。

定时器-延时函数:

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


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


注意点
延时器需要等待,所以后面的代码先执行
每一次调用延时器都会产生一个新的延时器

需要注意的是,setTimeout()和setInterval()函数返回的是一个计时器ID,可以通过clearTimeout()和clearInterval()函数来清除对应的计时器。例如:

let timerId = setTimeout(function() {
  console.log("Hello World!");
}, 3000);

clearTimeout(timerId);  // 清除计时器
 

案例 5秒钟之后消失的广告
需求:5秒钟之后,广告自动消失
分析:
①:设置延时函数
②:隐藏元素

 

JS 执行机制:

JavaScript是一种单线程的语言,即在同一时间只能执行一个任务。但是,JS可以通过事件循环机制来实现异步执行。

事件循环机制是JS引擎实现异步执行的核心特性。当JS代码执行遇到一个异步任务时,它会将该任务添加到执行栈以外的任务队列中。例如,在执行一段ajax请求的代码时,JS并不会一直等待请求完成再往下执行,而是会将请求任务放到任务队列中,继续执行后续代码。

当执行栈中的代码执行完毕时,JS会从任务队列中取出一个任务,放到执行栈中执行。这个过程不断重复,直到任务队列为空。

在JS中,任务队列分为宏任务(macro task)和微任务(micro task)两种。宏任务通常包括DOM事件、setTimeout和setInterval等,而微任务通常包括Promise、MutationObserver等。在执行完一个宏任务之后,JS会立即执行所有微任务队列中的任务,然后再从宏任务队列中取出下一个任务。

这个过程中,如果遇到同步任务,则会直接执行,不会添加到任务队列中。由于JS是单线程的,因此同一时间只能执行一个任务,异步任务的回调函数会在任务队列中等待执行机会。

思考:

console.log(1)
document.addEventListener('click', function () {
console.log(4)
})
console.log(2)
setTimeout(function () {
console.log(3)
}, 3000)

location对象:

JavaScript中的location对象用于获取当前窗口的URL信息,以及跳转到其他页面等操作。

以下是location对象的一些属性和方法:

  • location.href:获取或设置当前页面URL。

  • location.protocol:获取或设置当前页面使用的协议,如http、https等。

  • location.hostname:获取当前页面的主机名。

  • location.pathname:获取当前页面的路径名。

  • location.search:获取当前页面URL中的查询字符串部分,以?开始。

  • location.hash:获取当前页面URL中的哈希部分,以#开始。

  • location.reload():重新加载当前页面。

  • location.replace(url):用指定的URL替换当前页面,不会在浏览器中留下历史记录。

  • location.assign(url):用指定的URL加载页面,会在浏览器中留下历史记录。

通过检查location对象的属性和使用其方法,可以获取和修改当前页面的URL信息,实现页面跳转和刷新等操作。

本地存储:

本地存储介绍
以前我们页面写的数据一刷新页面就没有了,是不是?
随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常
性在本地存储大量的数据,HTML5规范提出了相关解决方案。
1、数据存储在用户浏览器中
2、设置、读取方便、甚至页面刷新不丢失数据
3、容量较大,sessionStorage和localStorage约 5M 左右
常见的使用场景:https://todomvc.com/examples/vanilla-es6/页面刷新数据不丢失

本地存储分类- localStorage:

目标: 能够使用localStorage 把数据存储的浏览器中
l 作用: 可以将数据永久存储在本地(用户的电脑), 除非手动删除,否则关闭页面也会存在
l 特性
Ø 可以多窗口(页面)共享(同一浏览器可以共享)
Ø 以键值对的形式存储使用

本地存储分类- localStorage
l 语法:         
localStorage.setItem(key, value)
存储数据:
localStorage.getItem(key)
获取数据:
localStorage.removeItem(key)
删除数据:


 存储复杂数据类型:

JavaScript中有多种存储复杂数据类型的方法,包括:

  1. JSON.stringify和JSON.parse方法

可以使用JSON.stringify方法将一个Javascript对象转换为JSON字符串,然后将该字符串存储在本地存储或服务器上。同样地,可以使用JSON.parse方法将JSON字符串转换回一个Javascript对象。

例如,将一个对象存储在本地存储中:

const obj = {
  name: 'John',
  age: 30
};
localStorage.setItem('myObj', JSON.stringify(obj));

然后可以在需要的时候将其取回:

const storedObj = localStorage.getItem('myObj');
const parsedObj = JSON.parse(storedObj);
console.log(parsedObj.name); // "John"

  1. 使用IndexedDB

IndexedDB是一个浏览器内置的数据库,可以用来存储大量的结构化数据,包括复杂数据类型。

例如,使用IndexedDB存储一个对象:

const request = window.indexedDB.open('myDatabase', 1);

request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(['myStore'], 'readwrite');
  const store = transaction.objectStore('myStore');
  
  const myObj = {
    name: 'John',
    age: 30
  };
  
  const request = store.put(myObj, 1);
  
  request.onsuccess = function() {
    console.log('Data saved successfully');
  };
  
  request.onerror = function() {
    console.log('Error: Data not saved');
  };
};

这将存储一个名为"myObj"的对象,可以在需要的时候取回。

  1. 使用Cookies

可以使用Cookies来存储复杂数据类型,但是需要将其转换为字符串格式,并考虑限制存储大小的问题。

例如,将一个对象存储在Cookie中:

const obj = {
  name: 'John',
  age: 30
};

document.cookie = 'myObj=' + JSON.stringify(obj) + '; max-age=3600';

然后可以在需要的时候取回:

const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
  const cookie = cookies[i].trim();
  
  if (cookie.startsWith('myObj=')) {
    const storedObj = cookie.substring(6);
    const parsedObj = JSON.parse(storedObj);
    console.log(parsedObj.name); // "John"
  }
}

这些方法都可以用来存储复杂数据类型,具体使用哪种方法取决于具体应用场景和需求。

综合案例:

需求: 录入学生信息,页面刷新数据不丢失
模块分析:
①:新增模块, 输入学生信息,数据会存储到本地存储中
②:渲染模块,数据会渲染到页面中
③:删除模块,点击删除按钮,会删除对应的数据

学生就业信息表
需求: 录入学生信息,页面刷新数据不丢失
思路分析:
①:因为页面刷新不丢失数据,所以可能存在已有数据,所以第一步,我们先找本地存储里面查找是
否有数据,如果有数据先进行渲染页面,如果没有数据,我们放一个空数组,用来存放数据
②:渲染模块,数据会渲染到页面中
③:新增模块, 输入学生信息,数据会存储到本地存储中,然后渲染页面
④:删除模块,点击删除按钮,会删除对应的数据,然后渲染页面
 

数组中map方法:
 

JavaScript中数组的map方法是一个高阶函数,接收一个回调函数作为参数,返回一个新的数组,数组中的每个元素都是原始数组中对应元素的处理结果。map方法不会修改原始数组。

map方法的语法如下:

array.map(function(currentValue, index, array) {
  // 对当前元素进行处理
  return processedValue;
});

参数说明:

  • currentValue:当前元素的值。
  • index:当前元素在数组中的索引。
  • array:原始数组。

例如,对一个数组中的元素进行平方操作:

const numbers = [1, 2, 3, 4, 5];
const squares = numbers.map(function(num) {
  return num * num;
});

console.log(squares); // [1, 4, 9, 16, 25]

上述代码中,map方法接收一个回调函数,该函数接收一个参数num,表示当前元素的值。回调函数返回num * num,即对当前元素进行平方操作,并将处理结果存储在新的数组squares中。

另外,ES6中的箭头函数可以简化map方法的写法:

const numbers = [1, 2, 3, 4, 5];
const squares = numbers.map(num => num * num);

console.log(squares); // [1, 4, 9, 16, 25]

箭头函数的写法更加简洁,但是需要注意箭头函数和普通函数的语法区别。

数组中join方法:

在 JavaScript 中,数组的 join() 方法可以将数组中所有的元素转成字符串,并将其连接起来返回一个字符串。该方法可以接收一个可选参数作为分隔符,用于指定每个元素之间的分隔符。

join() 方法没有改变原始数组,而是返回了一个新的字符串。

下面是 join() 方法的语法:

array.join(separator)

其中:

  • array:必需。要操作的数组。
  • separator:可选。指定分隔符。默认使用逗号 "," 分隔元素。

例如:

const arr = ["apple", "banana", "orange"];

// 使用默认的分隔符连接数组元素
const joinedArr = arr.join(); // "apple,banana,orange"

// 使用 "-" 分隔符连接数组元素
const joinedArr2 = arr.join("-"); // "apple-banana-orange"

注意,如果数组中含有 nullundefined,它们在连接后会被解释成空字符串。

另外,join() 方法不支持多维数组,如果传递给 join() 方法的数组中包含其他数组作为元素,会将其转化为字符串,而不是递归地将子数组拆分成字符串。

以上就是JS APl第五部分的内容啦!!(如果喜欢的求点赞)

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

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

相关文章

Fiddler移动端抓包

本篇文章&#xff0c;博主想使用通俗易懂的话语&#xff0c;让大家明白以下内容&#xff1a; 什么是抓包哪些场景需要用到抓包Fiddler抓包的原理怎样使用Fiddler进行移动端抓包 抓包 包 (Packet) 是TCP/IP协议通信传输中的数据单位&#xff0c;一般也称“数据包”。 我们平常…

uniapp 云打包 生成安卓证书文件

现在使用uniapp来开发小程序&#xff0c;H5&#xff0c;APP越来越多了&#xff0c;目前开发了一款APP&#xff0c;使用的也是uniapp。在此记录下用uniapp开发app云打包时约到的一些问题吧。 前因是我司安卓同学休产假&#xff0c;像云打包时需要的证书文件只能自己动手来搞。看…

ai绘画Midjourney绘画提示词Prompt教程

一、Midjourney绘画工具 SparkAi【无需魔法使用】&#xff1a; SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&#xff0c;持续集成AI能力到…

【计算机网络笔记】物理层——物理介质

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

element-ui upload组件中将file文件数据转成二进制流数据格式

方法一 handleBeforeUpload (file)const reader new FileReader()reader.readAsArrayBuffer(file)reader.onload async function (theFile) {const binary new Blob([theFile.target.result]) // 转成二进制流数据 即binary数据格式}}方法二 const aBlob new Blob([file],…

阿里云租赁费用_阿里云服务器多配置报价表

阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、轻量应用服务器2核2G3M带宽轻量服务器一年87元&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;ECS云服务器e系列2核2G配置99元一年、2核4G配置365元一年、2核8G配置522元一年…

[HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

3 开发环境搭建

一、Ubuntu和Windows文件互传 ① 开启Ubuntu的FTP服务&#xff1a; 下载vsftpd&#xff1a;sudo apt-get install vsftpd; 打开vsftpd.conf&#xff1a;sudo nvim /etc/vsftpd.conf; 确保这两行代码没有被注释&#xff1a; 之后重启FTP服务&#xff1a; ② Windows下载FTP客…

Windows中使用ScreenToGif进行Gif录屏

文章目录 一、前言二、下载ScreenToGif2.1、官网2.2、Github下载 三、使用ScreenToGif3.1、安装打开3.2、录像机3.3、录屏3.4、保存Gif动图3.5、保存完成 四、最后 一、前言 之前写文章时需要录制网页操作效果&#xff0c;使用的是谷歌的扩展插件【镀铬捕获】&#xff0c;后面…

【Java 基础】19 多线程基础

文章目录 进程和线程进程&#xff08;Process&#xff09;线程&#xff08;Thread&#xff09; 线程的创建1&#xff09;继承 Thread 类2&#xff09;实现 Runnable 接口3&#xff09;使用 Lambda 表达式4&#xff09;总结 线程的状态状态的分类状态间转换 多线程是一种 同时执…

【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0

React Typescript Webpack 模板 模板展示项目结构使用的部分扩展包页面配置代码Layout 公共容器组件路由Jspackage.json 开源模板下载TIP 模板展示 项目结构 使用的部分扩展包 &#x1f4c2; System ├── &#x1f4c2; Plugin │ ├── &#x1f4c4; file-loader | 在处…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(二)——数据清洗、转换

2 数据清洗、转换 此实验使用S3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 2 数据清洗、转换2.1 架构图2.2 数据清洗2.3 编辑脚本2.3.1 连接数据源&#xff08;s3&#xff09;2.3.2. 数据结构转换2.3.2 数据结构拆分…

力扣每日一题day23[20. 有效的括号]

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…

Python---面向对象的基本概念

对象 对象&#xff0c;object&#xff0c;现实业务逻辑的一个动作实体就对应着OOP编程中的一个对象&#xff01; 所以&#xff1a;① 对象使用属性&#xff08;property&#xff09;保存数据&#xff01;② 对象使用方法&#xff08;method&#xff09;管理数据&#xff01; …

python-学生管理|汉罗塔

1.编写程序&#xff0c;实现学生信息管理系统。 运行程序&#xff0c;在控制台输入“1”之后的结果如下所示&#xff1a; 学生管理系统 1.添加学生信息 2.删除学生信息 3.修改学生信息 4.显示所有学生信息 0.退出系统 请选择功能&#xff1a;1 请输入新学生的姓名:小红 请输入…

多波束EM2040D甲板单元更换CPU主板记录

前段时间多波束EM2040D甲板单元的CPU主板到货了。趁着船刚好靠港避风&#xff0c;我们带着这块主板去替换之前借来EM2040C的CPU主板。 1、CF卡替换问题 老主板有个CF卡&#xff0c;见下图。最好的解决方法就是将老CF卡替换新CPU主板上的新CF卡&#xff0c;因为这样改动最小。…

C++面试宝典第2题:逆序输出整数

题目 写一个方法&#xff0c;将一个整数逆序打印输出到控制台。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如&#xff1a;123的逆序输出为321&#xff0c;8600的逆序输出为68&#xff0c;-609的逆序输出为-906。 解析 这道题本身并没有什么…

国际语音呼叫中心适用的行业有哪些?

国际语音呼叫中心的出现&#xff0c;使企业可以在全球范围内提供统一的客户支持&#xff0c;有效地解决客户服务、市场营销等国际性电话沟通问题&#xff0c;为企业提供了卓越的全球客户服务&#xff0c;确保客户在不同国家和地区之间获得一致的、高质量的支持。那么哪些行业适…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之文件管理(1)》(22)

《Linux操作系统原理分析之文件管理&#xff08;1&#xff09;》&#xff08;22&#xff09; 7 文件管理7.1 文件与文件系统7.1.1 文件7.1.3 文件系统及其功能 7.2 文件的组织结构7.2.1 文件的逻辑结构7.2.2 文件的物理结构一、顺序结构&#xff08;顺序文件或连续文件&#xf…