当前位置: 首页 > news >正文

JavaScript-下篇

        上篇我们学习了,一些基础语法和函数,现在我们学习下篇,主要包括,对象和事件。而对象又包括,数组Arrays,String字符串,BOM,DOM等

JS对象

Arrays数组

        数组是一种特殊的对象,用于存储有序的值集合。了解数组的创建方式、遍历方式、属性和方法是掌握JavaScript的重要部分。以下是关于JavaScript数组的详细介绍。

数组的创建

JavaScript中可以使用多种方式创建数组,最常见的方法有:

  1. 数组字面量: 这是创建数组的最简单和推荐的方式。通过中括号[]可以直接初始化数组。

const fruits = ['苹果', '香蕉', '橘子'];

2. Array构造函数: 可以使用new Array()构造函数来创建数组,虽然不推荐这种方法,但它仍然有效。

const fruits = new Array('苹果', '香蕉', '橘子');

 注意,如果只传入一个数字作为参数,则会创建一个指定长度的空数组。

const arrayLength = new Array(5); // 创建一个长度为5的空数组

3. 使用Array.of(): Array.of()方法可以创建一个新的数组实例,其参数是数组的元素。

const numbers = Array.of(1, 2, 3, 4, 5);
数组的遍历方式

遍历有好几种方法,我这里介绍常用的两种。

  1. for循环: 使用经典的for循环可以通过索引遍历数组。

const fruits = ['苹果', '香蕉', '橘子'];
for (let i = 0; i < fruits.length; i++) {console.log(fruits[i]);
}

 2.forEach()方法: forEach()是一个数组方法,可以对数组中的每个元素执行提供的函数。

fruits.forEach(function(fruit) {console.log(fruit);
});
数组的属性和方法 

        作为后端开发者,我们不需要了解那么多方法和属性,简单了解即可,这里只介绍常用的属性和方法

 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS 对象-Arrays</title>
</head>
<body><script>//创建数组var arr = new Array(1, 2, 3, 4, 5);for (let i = 0; i < array.length; i++) {console.log(array[i]); }var arr = [1, 2, 3, 4, 5];arr[10] = 50; //即使没有10这个索引,也不会报错,因为长度可以动态变化//访问数组元素console.log(arr[0]); //1console.log(arr[1]); //2console.log(arr[10]);//50log(arr[9]); //没有定义的索引元素是undefined//数组可以存储不同类型的值arr[8] = "hello";//为8索引位置添加字符串元素/* JS 中的数组与Java中的集合类似,可以存储不同类型的数据,可以动态添加和删除元素,可以对数组进行排序等操作。 *///数组的遍历for (let i = 0; i < arr.length; i++) {console.log(arr[i]); //1 2 3 4 5 hello}//forEach方法  arr.forEach(function(e) {console.log(e); //1 2 3 4 5 hello});/* forEach方法可以对数组中的每一个元素进行操作, 如果是undefined,会跳过不会打印。for循环会遍历所有元素,包括undefined。*///forEach方法,ES6引入了箭头函数,和Java中lambda表达式类似,可以简化代码。arr.forEach(e => console.log(e)); //1 2 3 4 5 hello//数组的属性和方法arr.push(6,7,8); //在数组末尾添加元素arr.splice(2, 2); //在索引为2的位置开始删除2个元素arr.pop(); //删除数组末尾的元素arr.shift(); //删除数组第一个元素arr.unshift(0); //在数组开头添加元素arr.sort(); //对数组进行排序arr.reverse(); //对数组进行反转arr.join("-"); //将数组元素用-连接成字符串arr.slice(1, 4); //从索引1到索引3的元素组成一个新数组arr.map(function(e) {return e * 2; //对数组元素进行映射}); //返回一个新数组,元素是原数组元素的两倍arr.filter(function(e) {return e > 3; //返回一个新数组,元素是原数组元素大于3的元素}); //返回一个新数组,元素是原数组元素大于3的元素arr.reduce(function(pre, cur) {return pre + cur; //对数组元素进行求和}); //返回一个值,是数组元素的求和arr.indexOf(3); //返回元素3的索引,如果不存在返回-1arr.lastIndexOf(3); //返回元素3的最后一个索引,如果不存在返回-1arr.includes(3); //判断元素3是否存在,存在返回true,不存在返回false</script></body>
</html>

String字符串

字符串创建

在JavaScript中,可以通过多种方式创建字符串:

1.使用字符串字面量: 最常见的方式是使用单引号'或双引号"括起来的字符。

var str1 = "Hello, world!";
var str2 = 'Hello, world!';

2.使用String构造函数: 使用new String()来创建字符串对象,尽管这种方式不常用,因为它会生成一个字符串对象,而不是一个简单的字符串。

var str3 = new String("Hello, world!");

注意:使用构造函数创建的字符串对象和字面量字符串在某些情况下表现会不同,因此一般推荐使用字面量。

字符串的属性
  1. length: 字符串的length属性返回字符串中的字符数,包括空格和标点符号。
console.log(str1.length); // 输出 13
字符串的方法

        JavaScript中的字符串对象提供了许多有用的方法,有Java基础的同学会觉得非常简单,因为大部分方法都是一摸一样。以下是一些常用的方法:

1.indexOf(): 返回指定字符或子字符串在字符串中第一次出现的位置,未找到则返回-1。

console.log(str1.indexOf("o")); // 输出 4

2.charAt(): 返回字符串中指定位置的字符。

console.log(str1.charAt(0)); // 输出 "H"

3.substring(): 返回字符串的一部分。第一个参数为开始索引,第二个参数为结束索引。

console.log(str1.substring(0, 5)); // 输出 "Hello"

4.replace(): 替换字符串中匹配的部分,返回替换后的新字符串。

console.log(str1.replace("world", "JavaScript")); // 输出 "Hello, JavaScript!"

5.trim(): 去掉字符串两端的空格。

var str4 = "   Hello, world!   ";
console.log(str4.trim()); // 输出 "Hello, world!"
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS对象-string</title>
</head>
<body><script>// 字符串创建var str1 = "hello string";var str2 = new String("hello string");//属性console.log(str1.length); // 12console.log(str2.length); // 12//方法console.log(str1.toUpperCase()); // HELLO STRINGconsole.log(str2.toUpperCase()); // HELLO STRINGconsole.log(str1.toLowerCase()); // hello stringconsole.log(str2.toLowerCase()); // hello stringconsole.log(str1.indexOf("l")); // 2console.log(str2.indexOf("l")); // 2console.log(str1.lastIndexOf("l")); // 9console.log(str2.lastIndexOf("l")); // 9console.log(str1.charAt(2)); // lconsole.log(str2.charAt(2)); // lconsole.log(str1.substring(2, 5)); // lloconsole.log(str2.substring(2, 5)); // lloconsole.log(str1.slice(2, 5)); // lloconsole.log(str2.slice(2, 5)); // lloconsole.log(str1.replace("l", "L")); // heLLo stringconsole.log(str2.replace("l", "L")); // heLLo stringconsole.log(str1.trim()); // "hello string"console.log(str2.trim()); // "hello string"console.log(str1.split(" ")); // ["hello", "string"]console.log(str2.split(" ")); // ["hello", "string"]console.log(str1.concat(" world")); // "hello string world"console.log(str2.concat(" world")); // "hello string world"console.log(str1.localeCompare("hello")); // 1console.log(str2.localeCompare("hello")); // 1console.log(str1.match(/l/g)); // ["l", "l", "l", "l", "l", "l", "l", "l", "l", "l"]console.log(str2.match(/l/g)); // ["l", "l", "l"]console.log(str1.search("l")); // 2console.log(str2.search("l")); // 2console.log(str1.replace(/l/g, "L")); // heLLo stRingconsole.log(str2.replace(/l/g, "L")); // heLLo stRingconsole.log(str1.localeCompare("hello")); // 1console.log(str2.localeCompare("hello")); // 1console.log(str1.localeCompare("hello", "en", { sensitivity: "base" })); // 1console.log(str2.localeCompare("hello", "en", { sensitivity: "base" })); // 1console.log(str1.localeCompare("hello", "en", { sensitivity: "accent" })); // 1console.log(str2.localeCompare("hello", "en", { sensitivity: "accent" })); // 1console.log(str1.localeCompare("hello", "en", { sensitivity: "case" })); // 1console.log(str2.localeCompare("hello", "en", { sensitivity: "case" })); // 1</script></body>
</html>

JSON对象

自定义对象的创建

在 JavaScript 中,我们可以使用对象字面量的语法来创建自定义对象。以下是一个简单的示例:

var person = {name: "John",age: 30,city: "New York",eat: function() {alert("干饭!");}
};

在这个示例中,我们创建了一个名为 person 的对象,它有三个属性(nameage 和 city)以及一个方法(eat)。这个 eat 方法在被调用时会弹出一个消息框,显示“干饭!”。

调用自定义对象的方法

我们可以通过对象的名称加上点操作符来调用方法。例如,调用 eat 方法和输出 name 属性的值。

person.eat();            // 调用 eat 方法
alert(person.name);     // 输出 name 属性的值

这段代码将弹出“干饭!”的提示框,并且接着显示当前对象的 name 属性。 

JSON 对象定义

        JSON 是一种轻量级的数据交换格式,它是基于 JavaScript 对象表示法的。我们可以将 JSON 看作是字符串形式的 JavaScript 对象。以下是两种定义 JSON 对象的方式:

字符串形式的 JSON 对象

首先,我们可以使用字符串来定义 JSON 对象:

var jsonObj = '{"name": "John", "age": 30, "city": "New York"}'; // 字符串形式的 JSON 对象

这种方式使用了 JSON 格式的字符串,但这并不是一个真正的对象,而只是一个字符串

JavaScript 对象的表示

我们也可以直接使用 JavaScript 对象的形式来定义一个 JSON 对象:

var jsonObj = {"name": "John","age": 30,"city": "New York"
};

 在这里,jsonObj 是一个有效的 JavaScript 对象。 

JSON 对象与字符串JSON对象的转换

转换为字符串形式的JSON

var jsonStr = JSON.stringify(jsonObj);

转换为JSON对象

var newObj = JSON.parse(jsonStr);
两者区别 

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于在不同的编程语言之间传输和存储数据。JSON有两种基本形式:JSON对象和JSON字符串,这两者之间存在显著的区别。

  1. JSON对象:JSON对象是一个数据结构,可以通过“对象.属性”的方式来访问其值。在JavaScript中,JSON对象是一个键值对集合。JSON对象直接可以被程序使用,它是适合代码处理的原始数据类型。

  2. JSON字符串:JSON字符串在存储和传输数据时使用,它提供了一种将对象序列化为文本的方式,以便在网络上传输或者存储到文件中。

 BOM

        BOM(浏览器对象模型)是JavaScript的一个重要组成部分,使得开发者能够通过脚本控制浏览器窗口。与DOM(文档对象模型)不同,BOM并不直接涉及HTML或CSS,而是与浏览器本身的行为及功能相关。

作为一个Java程序员,我们只需重点关注这两个,Window和Location

Window

 /* 重点了解 window 对象 和 Location 对象 *///获取Window.alert("Hello BOM!");alert("Hello BOM!"); //方法confirm("你确定要删除吗?");//返回true或false//定时器var i =0;setInterval(function(){console.log("定时器执行"+i);i++;},1000 //每隔1秒执行一次  ); //周期性的执行函数setTimeout(function(){alert("JS");},2000 //2秒后执行一次      ); //延迟执行函数
Location

 //Location对象//获取当前页面的URLvar url = window.location.href;console.log(url);location.href = "https://www.baidu.com"; //跳转到指定页面

DOM

        DOM是文档对象模型的缩写,它将整个HTML或XML文档视为一个树形结构。每一个元素、属性和文本都成为这个结构中的一个节点。这样,我们就能通过JavaScript来访问和修改这些节点,从而更新网页的内容和样式,而不需要重新加载整个页面。

获取DOM元素

在JavaScript中,我们可以使用多种方法来获取DOM元素。以下是一些常用的方法:

改变元素的内容和样式

例如,我们可以通过DOM改变某个元素的颜色和背景:

element.style.color = "red";
element.style.backgroundColor = "yellow";
访问和修改元素的属性

我们可以访问元素的属性,如复选框的状态:

var checkboxes = document.getElementsByName("my_hobby");
for (var i = 0; i < checkboxes.length; i++) {if (checkboxes[i].checked) {alert(checkboxes[i].value); // 显示被选中的爱好}
}

        DOM不仅是网页的结构框架,也是我们与网页交互的重要通道。学习如何有效使用DOM可以帮助我们开发出更动态、互动丰富的网页。 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS对象-DOM</title>
</head>
<body><img src="../web_html/images/20240604hlag8k.webp" alt=""> <br><div id="bro_cat">Bro_cat</div><div class="001"> JS </div><div class="002"> DOM </div><input type="checkbox" name="my_hobby"> 电影<input type="checkbox" name="my_hobby"> 音乐<input type="checkbox" name="my_hobby"> 旅行<script>/* DOM 文档对象模型 */// 获取元素// 通过id获取元素var bro_cat = document.getElementById("bro_cat");// 通过标签名获取元素var dvs = document.getElementsByTagName("div");for (let i = 0; i < array.length; i++) {alert(dvs[i]);  }//通过name属性获取元素var hobby = document.getElementsByName("my_hobby");for (let i = 0; i < hobby.length; i++) {alert(hobby[i].value);}// 通过类名获取元素var js = document.getElementsByClassName("001")[0];var dom = document.getElementsByClassName("002")[0];// 改变元素的样式bro_cat.style.color = "red";js.style.backgroundColor = "yellow";dom.style.fontSize = "20px";// 获取元素的属性var input_hobby = document.getElementsByName("my_hobby");for (var i = 0; i < input_hobby.length; i++) {if (input_hobby[i].checked) {alert(input_hobby[i].value);}}</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>JS事件</title>
</head>
<body><input type="button" id="btn1" value="按钮1" onclick="on()"> <input type="button" id="btn2" value="按钮2"><script>//事件绑定//通过标签属性绑定事件function on() {console.log("按钮1被点击了");}//通过DOM对象绑定事件var btn2 = document.getElementById("btn2");btn2.onclick = function() {console.log("按钮2被点击了");}</script></body>
</html>
常见事件

总结

        在现代前端开发中,JavaScript(JS)已经成为了构建动态网页和应用的重要工具。掌握其基本语法和概念是第一步,包括变量声明、数据类型、控制结构、函数和DOM操作等。随着深入学习,理解其原型继承、闭包和异步编程的机制将有助于编写出高效、可维护的代码。

        我写的有很多东西都没有涉及全面,想深入了解的可以参考下面官方手册学习……

参考手册

相关文章:

JavaScript-下篇

上篇我们学习了&#xff0c;一些基础语法和函数&#xff0c;现在我们学习下篇&#xff0c;主要包括,对象和事件。而对象又包括&#xff0c;数组Arrays&#xff0c;String字符串&#xff0c;BOM&#xff0c;DOM等 JS对象 Arrays数组 数组是一种特殊的对象&#xff0c;用于存储…...

STM32-HAL库驱动DHT11温湿度传感器 --2024.9.28

目录 一、教程简介 二、驱动原理讲解 &#xff08;一&#xff09;通信4步骤 &#xff08;二&#xff09;传感器数据解析 三、CubeMX生成底层代码 &#xff08;一&#xff09;基础配置 &#xff08;二&#xff09;配置DHT11的驱动引脚 &#xff08;三&#xff09;配置串口 四…...

使用C语言获取iostat中的await值的方法和方案

使用C语言获取iostat中的await值的方法和方案 1. 准备工作2. 调用iostat命令并获取输出3. 解析iostat输出4. 完整实现和错误处理5. 注意事项在Linux系统中,iostat命令是sysstat软件包的一部分,用于监控系统的CPU、网卡、tty设备、磁盘、CD-ROM等设备的活动情况和负载信息。其…...

阿里云域名解析和备案

文章目录 1、域名解析2、新手引导3、ICP备案 1、域名解析 2、新手引导 3、ICP备案...

gitee公钥设置、创建库及使用

简介 一、如何安装git 使用gitee&#xff0c;需要先安装git工具。 工具网站地址&#xff1a;https://git-scm.com/downloads 安装完成后&#xff0c;在terminal命令行输入git --version可以查看到git的版本。 二、登录gitee 我们先在 gitee上注册账号并登录。gitee官网&#x…...

融媒体服务中PBO进行多重采样抗锯齿(MSAA)

如果不理解pbo 那先去了解概念&#xff0c;在此不再解释&#xff0c;这是我为了做融合服务器viewpointserver做的一部分工作&#xff0c;融合服务器的功能是将三维和流媒体&#xff0c;AI融合在一起&#xff0c;viewpointserver会直接读取三维工程的文件&#xff0c;同时融合rt…...

说说BPMN概念及应用

BPMN&#xff08;Business Process Modeling and Notation&#xff09;即业务流程建模与标注&#xff0c;是一种由OMG&#xff08;Object Management Group&#xff0c;对象管理组织&#xff09;制定的业务流程建模语言。以下是对BPMN标准的详细解释&#xff1a; 一、BPMN的起…...

【微服务】初识(day1)

基础概念 集群 集群是将一个系统完整的部署到多个服务器&#xff0c;每个服务器提供系统的所有服务&#xff0c;多个服务器可以通过负载均衡完成任务&#xff0c;每个服务器都可以称为集群的节点。 分布式 分布式是将一个系统拆分为多个子系统&#xff0c;多个子系统部署在…...

15分钟学 Python 第40天:Python 爬虫入门(六)第一篇

Day40 &#xff1a;Python 爬取豆瓣网前一百的电影信息 1. 项目背景 在这个项目中&#xff0c;我们将学习如何利用 Python 爬虫技术从豆瓣网抓取前一百部电影的信息。通过这一练习&#xff0c;您将掌握网页抓取的基本流程&#xff0c;包括发送请求、解析HTML、存储数据等核心…...

分层解耦-05.IOCDI-DI详解

一.依赖注入的注解 在我们的项目中&#xff0c;EmpService的实现类有两个&#xff0c;分别是EmpServiceA和EmpServiceB。这两个实现类都加上Service注解。我们运行程序&#xff0c;就会报错。 这是因为我们依赖注入的注解Autowired默认是按照类型来寻找bean对象的进行依赖注入…...

HCIP-HarmonyOS Application Developer 习题(六)

&#xff08;多选&#xff09;1、Harmonyos多窗口交互能力提供了以下哪几种交互方式? A. 平行视界 B.全局消息通知 C.分屏 D.悬浮窗 答案&#xff1a;ACD 分析&#xff1a;系统提供了悬浮窗、分屏、平行视界三种多窗口交互&#xff0c;为用户在大屏幕设备上的多任务并行、便捷…...

【电路基础 · 3】实际电压源 实际电流源;两种电源的等效情况;戴维南模型 诺顿模型(自用)

总览 1.实际电源的两种模型和它们的等效变换 2.两种电源的等效情况 3.戴维南模型 && 诺顿模型 一、实际电源的两种模型和它们的等效变换 1.实际电压源 实际电压源不允许短路。因为它的内阻太小&#xff0c;如果短路&#xff0c;电流很大&#xff0c;可能会烧毁电源…...

案例-猜数字游戏

文章目录 效果展示初始画面演示视频 代码区 效果展示 初始画面 演示视频 猜数字游戏 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…...

POI数据的处理与分析

POI概念 POI&#xff08;Point of Interest&#xff0c;兴趣点&#xff09;数据指的是地理空间数据中的一类&#xff0c;表示某一具体地点或位置的信息。通常&#xff0c;这些数据包含位置坐标&#xff08;经纬度&#xff09;、名称、地址、类别和其他相关信息。POI 数据广泛应…...

ansible部分模块学习

ansible模块学习 copy模块 copy模块srcsource 源⽂件destdestination ⽬标backupbackupyes 则会在覆盖前进⾏备份mode修改权限owner修改为指定所有者group修改为指定⽤户组 案例1&#xff1a;传输/root/work/scripts/net-tools-install.sh⽂件到/opt/net-tools-install.sh …...

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(二).设置主键自增等特点

前言 在上一节中&#xff0c;主要介绍了 Navicat Premium 17 的使用以及创建一个基础的表格。当时只设置了给数据表补充字段&#xff0c;没有设置给数据表删除字段。现在补充一下。 ALTER TABLE student ADD test int(4); 给名为 student 的数据表添加 test 列&#xf…...

SQL第13课——创建高级联结

本课讲另外一些联结&#xff08;含义和使用方法&#xff09;&#xff0c;如何使用表别名&#xff0c;如何对被联结的表使用聚集函数。 13.1 使用表别名 第7课中使用别名引用被检索的表列&#xff0c;给列起别名的语法如下&#xff1a; SQL除了可以对列名和计算字段使用别名&a…...

订阅ROS2中相机的相关话题并保存RGB、深度和点云图

系统&#xff1a;Ubuntu22.04 ROS2版本&#xff1a;ROS2 humble 1.订阅ROS2中相机的相关话题并保存RGB图、深度图和点云图 ros2 topic list/stellar_1/rgb/image_raw /camera/depth/image_raw /stellar_1/points2CMakeLists.txt cmake_minimum_required(VERSION 3.15) projec…...

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI&#xff0c;旨在完全离线操作。它支持各种 LLM 服务&#xff0c;包括 Ollama 和 OpenAI 兼容的 API。该项目在 GitHub 上已有 38k 星&#xff0c;非常受欢迎。 功能介绍 废话不多说&#xff0c;上图&#xff01;…...

【Python】Python知识总结浅析

Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年首次发布。它以简洁的语法和强大的功能著称&#xff0c;适用于多种应用场景&#xff0c;包括Web开发、数据分析、人工智能、自动化脚本等。 易于学习和使用&#xff1a;Python的语法简洁明了&#xff0c;适合初…...

c#代码介绍23种设计模式_20策略者模式

目录 1、策略模式的定义 2、策略模式的结构 3、涉及到三个角色: 4、策略者模式在.NET中应用 5、策略者模式的适用场景 6、策略者模式的优缺点 7、实现思路 在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税、外商投资企业或外商企业所得税…...

FPGA-UART串口接收模块的理解

UART串口接收模块 背景 在之前就有写过关于串口模块的文章——《串口RS232的学习》。工作后很多项目都会用到串口模块&#xff0c;又来重新理解一下FPGA串口接收的代码思路。 关于串口相关的参数&#xff0c;以及在文章《串口RS232的学习》中已有详细的描述&#xff0c;这里就…...

复习HTML(基础)

目录 HTML含义 HTML作用 HTML的常用元素 元素的特点 元素的分类 1 是否嵌套关系 2 是否独占一行 块元素&#xff1a;独占一行 行内元素&#xff1a;共享一行 行内元素与块级元素的转换 3是否有结束标签 常用标签 1 标题标签&#xff1a;有六级 我们用h1 ~h6 表…...

Linux聊天集群开发之环境准备

一.windows下远程操作Linux 第一步&#xff1a;在Linux终端下配置openssh&#xff0c;输入netstate -tanp,查看ssh服务是否启动&#xff0c;默认端口22.。 注&#xff1a;如果openssh服务&#xff0c;则需下载。输入命令ps -e|grep ssh, 查看如否配有&#xff0c; ssh-agent …...

can 总线入门———can简介硬件电路

文章目录 0. 前言1. CAN简介2. 主流通讯协议对比3. CAN 硬件电路4. CAN 电平标准5. CAN 收发器 0. 前言 博客内容来自B站上CAN总线入门教程视频讲解&#xff0c;博客中的插图和内容均为视频中的内容。视频链接 CAN总线入门教程 1. CAN简介 先来看看一它名字的意思&#xff0c…...

【重学 MySQL】六十、空间类型

【重学 MySQL】六十、空间类型 空间数据类型的分类空间数据类型的属性空间数据的表示方式空间数据的操作应用场景 在MySQL中&#xff0c;空间类型&#xff08;Spatial Types&#xff09;主要用于支持地理特征的生成、存储和分析。这些地理特征可以表示世界上具有位置的任何东西…...

python实现DES算法

DES算法 一、算法介绍1.1 背景1.2 原理1.3 基本功能函数1.3.1 初始置换函数 I P IP IP1.3.2 f f f 轮函数1.3.3 逆初始置换函数 I P − 1 IP^{-1} IP−1 1.4 子密钥的生成 二、代码实现2.1 子密钥生成实现2.2 DES加解密实现2.3 完整代码 三、演示效果 一、算法介绍 1.1 背景…...

基于LORA的一主多从监测系统_框架搭建

第一节、框架搭建 打开CubeMAX&#xff0c;选择好芯片&#xff0c;进行基础配置 第一步、先配置时钟源 第二步、配置SYS选项 配置debug口以及计数器源&#xff0c;我这里选择TIM1 第三步、选择I2C接口 配置如下即可&#xff0c;默认配置不用改 第四步、串口选择 我们这里使…...

优化理论及应用精解【25】

文章目录 优化学习率调度1. 阶梯衰减&#xff08;Step Decay&#xff09;2. 余弦退火&#xff08;Cosine Annealing&#xff09;3. 多项式衰减&#xff08;Polynomial Decay&#xff09;4. 指数衰减&#xff08;Exponential Decay&#xff09;总结 梯度弥散效应 参考文献 优化 …...

贝锐蒲公英网盘首发,秒建私有云,高速远程访问

虽然公共网盘带来了不少便利&#xff0c;但是大家对隐私泄露和重要数据泄密的担忧也随之增加。如果想要确保数据安全&#xff0c;自建私有云似乎是一条出路&#xff0c;然而面对搭建私有云的复杂步骤&#xff0c;许多人感到力不从心&#xff0c;NAS设备的成本也往往让人望而却步…...