JavaScript 全攻略:从基础到精通

news2024/12/26 9:28:49

一、JavaScript 初印象

(一)起源与发展

JavaScript 的诞生源于对网页动态性的需求。1995 年,布兰登・艾奇仅用十天时间就设计出了这门语言,最初命名为 Mocha,后改为 LiveScript,最终定名为 JavaScript。它的出现为静态的网页带来了生机,使得网页能够实现实时数据刷新、响应用户交互等动态效果。随着互联网的发展,JavaScript 不断演进,从仅用于浏览器端的脚本语言,发展到如今可以在服务器端(如 Node.js)、移动应用开发等领域广泛应用。

(二)语言特点

JavaScript 是一种轻量级的编程语言,这意味着它可以在各种设备和平台上快速运行,不会给系统带来过多的负担。它属于解释型或即时编译型语言,代码可以直接在浏览器中被解释执行,无需经过复杂的编译过程。JavaScript 具有函数优先的特点,函数在语言中占据重要地位,可以作为一等公民进行传递和操作。同时,它也是一种多范式语言,支持面向对象、函数式、命令式等编程范式,开发者可以根据需求灵活选择编程风格。

(三)重要地位

在现代编程中,JavaScript 占据着至关重要的地位。它与 HTML 和 CSS 共同构成了 Web 开发的三大基石。HTML 负责网页的结构,CSS 负责网页的样式,而 JavaScript 则负责控制网页的行为,为网页添加交互性和动态效果。对于 Web 开发者来说,JavaScript 是必学的三种语言之一。随着技术的不断发展,JavaScript 的应用场景也在不断扩大,从传统的网页开发到移动应用开发、服务器端编程、桌面应用开发等领域,都能看到 JavaScript 的身影。

二、开启 JavaScript 之旅

(一)环境搭建

在开始 JavaScript 编程之旅前,我们需要搭建合适的开发环境。首先是安装 Node.js,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。我们可以从官方网站(https://nodejs.org/en/)下载安装包,选择长期维护版本(LTS)进行下载。安装过程非常简单,一直点击 “下一步” 即可。安装完成后,可以在命令提示符中输入node -v查看 Node.js 的版本,输入npm -v查看 npm 的版本,若出现版本号则说明安装成功。

接下来选择一款代码编辑器,Visual Studio Code(VSCode)是一个非常受欢迎的选择。它是一款功能强大且免费的源代码编辑器,支持多种操作系统。可以从官方网站(https://code.visualstudio.com/)下载并安装 VSCode。安装完成后,可以根据自己的需求安装一些 JavaScript 相关的插件,如 IntelliSense、Prettier Code Formatter 等,以提高开发效率。

(二)Hello World 程序

使用 VSCode 创建第一个 JavaScript 程序非常简单。打开 VSCode,选择 “文件”>“新建文件”,将文件命名为app.js。在文件中输入以下代码:

 

console.log("Hello, World!");

保存文件后,在 VSCode 的终端中打开一个新的终端窗口(可以使用快捷键 `Ctrl +``),使用以下命令运行代码:

 

node app.js

如果一切正常,你应该会看到控制台输出 “Hello, World!”。通过这个简单的程序,我们熟悉了使用 VSCode 编写和运行 JavaScript 代码的基本流程。

三、核心语法全解析

(一)变量与数据类型

JavaScript 支持多种数据类型,为编程提供了丰富的选择。其中,字符串是由字符组成的序列,可以用单引号或双引号括起来。例如,let str = "Hello, JavaScript!"。数字类型包括整数和浮点数,可进行各种算术运算。如let num = 10; let floatNum = 3.14。布尔值只有true和false两种,常用于条件判断。例如,let isTrue = true; let isFalse = false。

对象是一组键值对的集合,可以存储不同类型的数据。如let person = {name: "John", age: 30}。数组是一组有序的数据集合,可以包含不同类型的元素。例如,let arr = [1, "two", true]。

在 JavaScript 中,变量的声明使用var、let和const关键字。var声明的变量存在变量提升现象,即可以在声明之前使用,值为undefined。let和const则不存在变量提升,且const声明的变量一旦赋值就不能再被重新赋值。变量的赋值规则较为灵活,可以在声明时赋值,也可以先声明后赋值。例如,let x; x = 10。

(二)运算符与表达式

JavaScript 中的算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)等。例如,let a = 10; let b = 3; let result = a % b; // result 为 1。

比较运算符用于比较两个值的大小关系,如等于(==)、严格等于(===)、大于(>)、小于(<)等。例如,let c = 5; let d = 5; console.log(c === d); // true。

逻辑运算符有与(&&)、或(||)、非(!)。例如,let e = true; let f = false; console.log(e && f); // false。

表达式是由运算符和操作数组成的式子,可以进行各种计算和判断。例如,let g = (2 + 3) * 4; // g 为 20。

(三)控制结构

JavaScript 通过if、else关键字实现条件判断。例如,let score = 80; if (score >= 60) {console.log("及格");} else {console.log("不及格");}。

for循环用于重复执行一段代码。例如,for (let i = 0; i < 5; i++) {console.log(i);}。

while循环在条件为真时重复执行代码。例如,let count = 0; while (count < 3) {console.log(count); count++;}。

(四)函数与作用域

函数在 JavaScript 中起到封装和重用代码的作用。可以通过function关键字声明函数。例如,function add(a, b) {return a + b;}。

作用域定义了变量的可见性和生命周期。全局作用域在整个脚本或文件中都可见,局部作用域只在函数内部可见。函数内部可以访问外部作用域的变量,但外部作用域不能访问函数内部的变量。

(五)数组与对象

数组是一种有序的数据集合,可以通过索引访问元素。例如,let arr = [1, 2, 3]; console.log(arr[1]); // 2。可以使用各种方法对数组进行操作,如push添加元素、pop删除元素等。

对象是由键值对组成的无序集合,可以通过键来访问值。例如,let person = {name: "Alice", age: 25}; console.log(person.name); // Alice。对象也有很多方法可以使用,如Object.keys获取对象的键等。

四、深入 JavaScript 世界

(一)事件处理

在 HTML 中,元素可以通过 JavaScript 的事件处理机制实现交互。其中,按钮点击事件是常见的一种交互方式。在 JavaScript 中,可以通过 addEventListener 方法处理按钮点击事件。具体步骤如下:

  1. 获取按钮元素:可以使用 document.getElementById 方法获取按钮元素。例如,const button = document.getElementById("my-button");。
  1. 添加事件监听器:使用 addEventListener 方法在按钮上添加一个事件监听器。传入的第一个参数是事件类型,本例中为 click。第二个参数是处理程序函数,该函数将在按钮被点击时执行。例如,button.addEventListener("click", myFunction);。
  1. 定义处理程序函数:处理程序函数可以是任何 JavaScript 函数,它将在按钮被点击时执行。例如,function myFunction() { // 在此处添加要执行的代码 }。

在处理程序函数中,可以编写任何必要的代码,例如显示警报、发送 AJAX 请求或更新 DOM。示例代码如下:

 

<button id="my-button">点击我</button>

<script>

const button = document.getElementById("my-button");

button.addEventListener("click", function () {

alert("按钮被点击了!");

});

</script>

当点击按钮时,浏览器将显示一条警报消息,提示按钮被点击了。

(二)日期对象

日期对象在 JavaScript 中是一个重要的工具,用于处理日期和时间。可以使用 new Date() 创建一个日期对象,它将返回当前系统的当前时间。例如,var date = new Date();。

日期对象的创建方式有多种:

  1. 无参数创建:返回当前系统的当前时间。
  1. 指定日期创建:可以使用字符串或数字来指定日期。例如,var date = new Date("2023/1/1"); 或 var date = new Date(2023, 0, 1);(注意:月份从 0 开始,0 表示 1 月)。

日期对象的比较方法:

可以使用比较运算符(如 >、<、>=、<=)来比较两个日期对象。例如,var date1 = new Date("2023/1/1"); var date2 = new Date("2023/1/2"); console.log(date1 < date2); // true。

(三)数组对象

数组是一种有序的数据集合,可以存储不同类型的元素。在 JavaScript 中,有多种创建数组的方式:

  1. 字面量语法:使用方括号 [] 创建一个数组。例如,const myArray = [];。
  1. Array 构造函数:使用 new Array() 创建数组。例如,const myArray = new Array();。
  1. 从可迭代对象创建:可以从字符串、数组或其他可迭代对象创建数组。例如,const myString = "Hello"; const myArray = Array.from(myString); // ["H", "e", "l", "l", "o"]。
  1. 合并数组:可以使用 concat 方法合并两个或多个数组。例如,const array1 = [1, 2, 3]; const array2 = [4, 5, 6]; const mergedArray = array1.concat(array2); // [1, 2, 3, 4, 5, 6]。
  1. 展开运算符:展开运算符(...)可用于将一个数组展开为另一个数组的元素。例如,const array1 = [1, 2, 3]; const array2 = [...array1, 4, 5, 6]; // [1, 2, 3, 4, 5, 6]。

数组有很多丰富的方法,例如:

  1. 添加数组元素:
    • 下标添加:通过指定下标添加元素。例如,const arr = new Array(3); arr[1] = "js";。
    • push 方法:在数组的尾部添加元素。例如,const arr01 = [1, 2, 3, 4]; arr01.push(5);。
    • unshift 方法:在数组头部添加元素。例如,const arr01 = [1, 2, 3, 4]; arr01.unshift(5);。
    • concat 方法:把一个数组的元素全部添加进数组里,也可以拼接多个数组。例如,const arr01 = [1, 2, 3, 4]; const arr02 = [1, "2", "html", null, undefined, true]; const arr03 = arr01.concat(arr02); const arr04 = arr01.concat(arr02, arr03);。
  1. 删除数组元素:
    • pop 方法:从数组尾部删除元素。例如,const arr01 = [1, 2, 3, 4]; arr01.pop();。
    • shift 方法:从数组头部删除元素。例如,const arr01 = [1, 2, 3, 4]; arr01.shift();。
    • splice 方法:截取数组内容后,原本的数组内容发生改变,删除截取的元素。例如,const arr01 = [1, 2, 3, 4]; const arr02 = arr01.splice(1, 2);。

(四)算术对象

JavaScript 的 Math 对象提供了一系列数学方法和常数。以下是一些常见的方法:

  1. Math.min():返回所有传递的值中的最小值。例如,Math.min(0, 150, 30, 20, -8, -200) // -200。
  1. Math.max():返回两个指定的数中带有较大的值的那个数。例如,Math.max(0, 150, 30, 20, -8, -200) // 150。
  1. Math.round():函数返回一个数字四舍五入后最接近的整数。例如,Math.round(4.7) // 5,Math.round(4.4) // 4。
  1. Math.sqrt():函数返回一个数的平方根。例如,Math.sqrt(64) // 8,Math.sqrt(25) // 5。
  1. Math.pow():函数返回基数(base)的指数(exponent)次幂。例如,Math.pow(8, 2) // 64。
  1. Math.floor():返回小于或等于一个给定数字的最大整数。例如,Math.floor(4.7) // 4,Math.floor(8.6) // 8。
  1. Math.random():函数返回一个浮点伪随机数在范围从 0 到小于 1。例如,Math.random() // 0.15497907645259867。可以通过一些方法实现获取给定范围内的随机数,例如,function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min;},function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min;}。
  1. Math.cos():函数返回一个数值的余弦值。例如,Math.cos(0, Math.PI / 180) // 1。
  1. Math.sin():函数返回一个数值的正弦值。例如,Math.sin(90 * Math.PI / 180) // 1。
  1. Math.ceil():函数返回大于或等于一个给定数字的最小整数。例如,Math.ceil(4.4) // 5。

(五)字符串对象

字符串在 JavaScript 中有很多操作方法,包括查找、替换、大小写转换、截取等:

  1. 字符串填充:可以使用 padStart 和 padEnd 方法在字符串的开头和结尾填充指定的字符,直到字符串达到指定的长度。例如,const binary = '101'.padStart(8, '0'); console.log(binary); // "00000101",const str = "Hello".padEnd(11, " *"); console.log(str); // "Hello * * *"。
  1. 字符串反转:可以使用展开运算符、反转方法和连接方法实现字符串反转。例如,const str = "developer"; const reversedStr = [...str].reverse().join(""); console.log(reversedStr); // "repoleved"。
  1. 第一个字母大写:可以使用 toUpperCase 和 slice 方法,或者使用字符数组使字符串的第一个字母大写。例如,let city = 'paris'; city = city[0].toUpperCase() + city.slice(1); console.log(city); // "Paris"。
  1. 字符串数组分割:可以使用扩展运算符将字符串拆分为字符数组。例如,const str = 'JavaScript'; const characters = [...str]; console.log(characters); // ["J", "a", "v", "a", "S", "c", "r", "i", "p", "t"]。
  1. 使用多个分隔符分割字符串:可以使用正则表达式按多个不同的分隔符拆分字符串。例如,const str = "java,css;javascript"; const data = str.split(/[,;]/); console.log(data); // ["java", "css", "javascript"]。
  1. 检查字符串是否包含:可以使用 includes 方法来检查字符串中是否包含特定序列。例如,const str = "javascript is fun"; console.log(str.includes("javascript")); // true。
  1. 检查字符串的开头或结尾是否有特定序列:可以使用 startsWith 和 endsWith 方法检查字符串是否以特定序列开始或结束。例如,const str = "Hello, world!"; console.log(str.startsWith("Hello")); // true,console.log(str.endsWith("world")); // false。
  1. 字符串替换:可以使用正则表达式方法与全局标志的替换,或使用新的 replaceAll 方法替换字符串中所有出现的特定子字符串。例如,const str = "I love JavaScript, JavaScript is amazing!"; console.log(str.replace(/JavaScript/g, "Node.js")); // "I love Node.js, Node.js is amazing!"。
  1. 大小写转换:可以使用 toLowercase 和 toUppercase 方法将字符串转换为全部大写或全部小写。例如,const firstName = "Matt"; console.log(firstName.toUpperCase()); // MATT。
  1. 字符串截取:可以使用 substring、slice、substr 等方法截取字符串的一部分。例如,const hello = "Hello World"; console.log(hello.substring(1, 4)); // "ell",const str = 'abcdefg'; console.log(str.slice(-3, -1)); // "ef",const str = 'abcdefg'; console.log(str.substr(1, 3)); // "bcd"。

(六)Number 对象

JavaScript 中的数字具有一些特点:

  1. 进制转换:可以使用不同的方法进行进制转换。例如,Number.toString(2) 可以将数字转换为二进制,Number.toString(8) 转换为八进制,Number.toString(16) 转换为十六进制。
  1. 无穷大与 NaN 的处理:Infinity 表示无穷大,NaN 表示非数字。可以使用 isFinite 方法判断一个值是否是有限数字,isNaN 方法判断一个值是否是 NaN。例如,console.log(isFinite(10)); // true,console.log(isNaN("abc")); // true。

五、实战项目展身手

(一)创建个人网站

使用 HTML、CSS 和 JavaScript 创建个人或项目网站是一个很好的实践前端技术的方式。首先,创建一个 HTML 文件作为网页的基本结构。以下是一个简单的 HTML 模板示例:

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>My Personal Website</title>

<link rel="stylesheet" href="styles.css">

<script src="script.js"></script>

</head>

<body>

<header>

<h1>Welcome to My Website</h1>

</header>

<nav>

<ul>

<li><a href="#">Home</a></li>

<li><a href="#">About</a></li>

<li><a href="#">Projects</a></li>

<li><a href="#">Contact</a></li>

</ul>

</nav>

<main>

<section id="about">

<h2>About Me</h2>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>

</section>

<section id="projects">

<h2>My Projects</h2>

<ul>

<li>Project 1</li>

<li>Project 2</li>

<li>Project 3</li>

</ul>

</section>

<section id="contact">

<h2>Contact Me</h2>

<form>

<input type="text" placeholder="Your Name">

<input type="email" placeholder="Your Email">

<textarea placeholder="Your Message"></textarea>

<button type="submit">Send</button>

</form>

</section>

</main>

<footer>

<p>Copyright © [Your Name] [Year]</p>

</footer>

</body>

</html>

在这个 HTML 结构中,我们有一个头部(<header>)用于显示网站标题,一个导航栏(<nav>)用于链接到不同的页面部分,一个主要内容区域(<main>)包含关于、项目和联系部分,以及一个页脚(<footer>)用于版权信息。

接下来,创建一个 CSS 文件(styles.css)来为网页添加样式。例如:

 

body {

font-family: Arial, sans-serif;

margin: 0;

padding: 0;

}

header {

background-color: #333;

color: #fff;

padding: 20px;

}

nav ul {

list-style: none;

margin: 0;

padding: 0;

}

nav ul li {

display: inline-block;

margin-right: 20px;

}

nav ul li a {

text-decoration: none;

color: #fff;

}

main {

padding: 20px;

}

footer {

background-color: #333;

color: #fff;

text-align: center;

padding: 10px;

}

这个 CSS 样式为网页设置了基本的字体、颜色和布局。

最后,创建一个 JavaScript 文件(script.js)来为网页添加交互性。例如,可以使用 JavaScript 来验证表单输入:

 

const form = document.querySelector('form');

form.addEventListener('submit', function(event) {

event.preventDefault();

const name = document.querySelector('input[type="text"]').value;

const email = document.querySelector('input[type="email"]').value;

const message = document.querySelector('textarea').value;

if (name === '' || email === '' || message === '') {

alert('Please fill in all fields.');

} else {

alert('Form submitted successfully!');

}

});

这段代码为表单添加了一个提交事件监听器,当表单提交时,它会检查输入是否为空,如果有任何字段为空,它会显示一个警告消息;如果所有字段都有值,它会显示一个成功消息。

(二)小程序开发

利用前端框架开发小程序可以增加对前端框架的实践理解。以使用 Vue.js 开发小程序为例,首先需要安装 Vue.js 和相关的小程序开发工具。可以使用 npm 安装 Vue.js:

 

npm install vue

然后,安装小程序开发工具,如微信开发者工具。创建一个新的小程序项目,并在项目中引入 Vue.js。在小程序的页面中,可以使用 Vue.js 的语法来构建界面和处理逻辑。例如:

 

<template>

<view>

<text>{{ message }}</text>

<button @click="changeMessage">Click me</button>

</view>

</template>

<script>

export default {

data() {

return {

message: 'Hello, Vue.js in Mini Program!'

};

},

methods: {

changeMessage() {

this.message = 'Message changed!';

}

}

};

</script>

在这个示例中,我们使用 Vue.js 的模板语法来显示一个文本和一个按钮。当按钮被点击时,会调用changeMessage方法来改变文本的内容。

(三)游戏开发

通过 JavaScript 开发简单游戏可以提高控制和逻辑能力。以开发一个简单的猜数字游戏为例,首先创建一个 HTML 文件:

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Guess the Number Game</title>

<link rel="stylesheet" href="styles.css">

</head>

<body>

<h1>Guess the Number Game</h1>

<p>Guess a number between 1 and 100.</p>

<input type="number" id="guessInput">

<button id="guessButton">Guess</button>

<p id="result"></p>

<script src="script.js"></script>

</body>

</html>

然后创建一个 CSS 文件来为游戏添加样式:

 

body {

font-family: Arial, sans-serif;

text-align: center;

}

input[type="number"] {

padding: 5px;

font-size: 16px;

}

button {

padding: 10px 20px;

font-size: 16px;

background-color: #4CAF50;

color: #fff;

border: none;

cursor: pointer;

}

最后,创建一个 JavaScript 文件来实现游戏逻辑:

 

let targetNumber = Math.floor(Math.random() * 100) + 1;

const guessInput = document.getElementById('guessInput');

const guessButton = document.getElementById('guessButton');

const result = document.getElementById('result');

guessButton.addEventListener('click', function() {

const guess = parseInt(guessInput.value);

if (isNaN(guess)) {

result.textContent = 'Please enter a valid number.';

} else if (guess === targetNumber) {

result.textContent = 'Congratulations! You guessed the number.';

} else if (guess < targetNumber) {

result.textContent = 'Too low. Try again.';

} else {

result.textContent = 'Too high. Try again.';

}

});

这段代码生成一个随机数作为目标数字,当用户点击 “Guess” 按钮时,它会检查用户的输入是否与目标数字相等,如果不相等,它会提示用户输入的数字是太高还是太低。

六、学习指南与资源

(一)学习建议

学习 JavaScript 是一个循序渐进的过程,以下是一些学习顺序和方法建议:

学习顺序

  • 首先,熟悉 JavaScript 的基本语法和概念,包括变量、数据类型、运算符、控制结构等。可以通过在线教程、视频课程等资源进行学习,建立起对 JavaScript 的初步认识。
  • 接着,深入学习函数与作用域、数组与对象等核心内容,掌握如何封装和重用代码,以及如何操作和管理数据集合。
  • 然后,学习事件处理、日期对象、算术对象、字符串对象和 Number 对象等,了解 JavaScript 提供的各种内置对象和方法,以便在实际开发中能够灵活运用。
  • 之后,可以通过实战项目来巩固所学知识,如创建个人网站、开发小程序和游戏等,提高实际开发能力。
  • 最后,持续学习和探索新的 JavaScript 特性和框架,保持对技术的更新和提升。

学习方法

  • 多实践:JavaScript 是一门实践性很强的语言,只有通过大量的代码编写才能真正掌握。可以从简单的例子开始,逐渐增加代码的复杂度,不断挑战自己。
  • 做项目:参与实际项目是提高 JavaScript 技能的有效途径。可以自己动手开发一些小项目,或者参与开源项目,与其他开发者合作,学习他们的经验和技巧。
  • 看文档:JavaScript 的官方文档和各种技术博客是学习的重要资源。在遇到问题时,首先查阅文档,了解语言的规范和用法,同时也可以学习到一些最佳实践和技巧。
  • 参加社区:加入 JavaScript 社区,参与讨论和交流,分享自己的经验和问题,从其他开发者那里获取反馈和建议。Stack Overflow 等社区平台是很好的学习和交流场所。
  • 多看视频少看书:对于初学者来说,视频教程通常更加直观和易于理解。可以通过观看优质的 JavaScript 视频教程,快速入门并掌握基本概念和技能。当然,书籍也是很好的学习资源,可以在有一定基础后深入阅读,系统地学习 JavaScript 知识。

(二)资源推荐

以下是一些学习 JavaScript 的优质资源推荐:

慕课网:提供丰富的 JavaScript 课程,涵盖从基础到高级的各个阶段。课程内容由专业的讲师团队精心制作,包括视频讲解、代码示例和实战项目,适合不同层次的学习者。例如,黄秩老师的 vue.js 课程和刘宇波老师的机器学习课程,以通俗易懂、思路清晰、水平较高而受到好评。

MDN Web Docs:Mozilla 维护的权威网站,提供了关于 JavaScript 和 Web 开发的详细文档和教程。内容全面、准确,并且实时更新,是学习 JavaScript 的重要参考资料。无论是初学者还是有经验的开发者,都能从中获取到有价值的信息。

Stack Overflow:全球最大的程序员问答社区,在学习 JavaScript 过程中遇到问题时,可以在 Stack Overflow 上搜索答案。这里有大量的开发者分享他们的经验和解决方案,能够帮助你快速解决问题。同时,通过阅读其他开发者的问题和回答,也可以拓宽自己的知识面。

GitHub:开源代码托管平台,上面有众多优秀的 JavaScript 项目。可以通过浏览和研究这些项目,学习到先进的开发技术和最佳实践。同时,也可以参与开源项目,与其他开发者合作,提高自己的开发能力。此外,GitHub 上还有很多 JavaScript 学习资源,如教程、代码示例等,可以根据自己的需求进行搜索和学习。

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

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

相关文章

OLED显示屏中常见的3-spi和4-spi

显示屏中经常出现的IIC&#xff0c;3-spi和4-spi 其中&#xff0c;在用spi接口中经常用到的是4-spi&#xff0c;和IIC相比&#xff0c;spi有更高的传输速度。而IIC需要更少的引脚。下面是以SH1107驱动手册里的内容简单了解3-spi和4-spi区别 从两张图中可以看出&#xff0c;3…

Vue2(十三):路由

一、路由的简介 vue-rooter&#xff1a;是vue的一个插件库&#xff0c;专门用来实现SPA应用 1.对SPA应用的理解 1、单页 Web 应用&#xff08;single page web application&#xff0c;SPA&#xff09;。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…

Hutool工具包

下载jar包网址 hutool-all-5.3.2.jar下载及Maven、Gradle引入代码&#xff0c;pom文件及包内class -时代Java (nowjava.com) maven导入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.2&l…

PHP后台+基于微信小程序外卖点餐系统毕业设计源代码作品和开题报告

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

Ansible学习之ansible-pull命令

想要知道ansible-pull是用来做什么的&#xff0c;就需要了解Ansible的工作模&#xff0c;Ansible的工作模式有两种&#xff1a; push模式 push推送&#xff0c;这是Ansible的默认模式&#xff0c;在主控机上编排好playbook文件&#xff0c;push到远程主机上来执行。pull模式 p…

一文搞懂CP-ABE,基于访问控制树的BSW方案原理分析与源码实现【基于C++、PBC库】

文章目录 一. 概述1.1 CP-ABE基础介绍1.2 访问控制树与BSW方案原理1.2.1 系统模型与角色1.2.2 主要算法1.2.3 访问结构与访问树1.2.4 数学基础 二. 具体算法流程2.1 Setup&#xff08;初始化&#xff09;2.2 KeyGen&#xff08;密钥生成&#xff09;2.3 Encrypt&#xff08;加密…

Typora---进度条(1)

本系列专门介绍关于typora中用到的小玩意。&#xff08;哈哈哈哈哈哈&#xff09; 本帖子讲述关于 进度条 的事情。 在typora中通过下面的语句可以显示出一个进度条&#xff1a; ![95% done](https://markdone.org/progress//95.png)通过更改上面语句中的数字可以展示不同的进…

local minima 的问题如何解决

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初识机器学习&#xff09;是遇到了两个问题&#xff0c;第一个是在求解函数未知参数数时会遇到local minima的问题&#xff0c;在哪里我们并没有过多解释&#xff0c;就是说一般遇不到并且很好解决&#xf…

合并两个有序数组(c语言)

1.//给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 //注意&#xff1a;最终&#xff0c;合并后数…

Unity 2D RPG Kit 学习笔记

学习资料&#xff1a; B站教学视频&#xff1a;https://www.bilibili.com/video/BV1dC4y1o7A5?p1&vd_source707ec8983cc32e6e065d5496a7f79ee6 2D RPG Kit Documentation.pdf文档 1、2D RPG Kit Documentation文档 1.1、Scenes/TitleScreen 开始菜单工程 1.2、https://it…

32、Qt读写csv文件

一、写入 QString fileName QFileDialog::getSaveFileName(this, "写入", "/untitled.csv", tr("Files (*.csv)"));if(fileName.isEmpty()){QMessageBox::warning(this, "提示", "文件名不能为空", QMessageBox::Ok);retur…

探索分布式IO模块的介质冗余:赋能工业自动化的稳健之心

在日新月异的工业自动化领域&#xff0c;每一个细微环节的稳定性都直接关系到生产线的效率与安全。随着智能制造的深入发展&#xff0c;分布式IO&#xff08;Input/Output&#xff09;模块作为连接现场设备与控制系统的关键桥梁&#xff0c;其重要性日益凸显。我们自主研发的带…

网络原理-传输层UDP

上集回顾&#xff1a; 上一篇博客中讲述了应用层如何自定义协议&#xff1a;确定传输信息&#xff0c;确定数据格式 应用层也有一些现成的协议&#xff1a;HTTP协议 这一篇博客中来讲述传输层协议 传输层 socket api都是传输层协议提供的&#xff08;操作系统内核实现的了…

MBTI人格测试项目(uni-app微信小程序 + SpringBoot)

目录 项目概述 测试 & 计分方式说明 页面展示 开发日志文档 素材&#xff1a;题库和人格分析 Gitee源码地址 项目概述 1.通过回答70道不同类型的题目&#xff0c;推算出MBTI人格类型&#xff0c;并给出此人格类型的解析。 2.使用uni-app编写微信小程序。 3.前端使…

车辆重识别(2021ICML改进的去噪扩散概率模型)论文阅读2024/9/29

所谓改进的去噪扩散概率模型主要改进在哪些方面&#xff1a; ①对数似然值的改进 通过对噪声的那个方差和T进行调参&#xff0c;来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析&#xff0c;发现在T非常大的情况下对样本质量几乎没有影响&#xff0c;也就是说…

Keil安装简易教程

1、安装MDK538a.exe 2、一直点下一步&#xff0c;默认安装即可。安装完成依次点击进行注册 3、利用Keygen进行License注册 4、Pack Installer 下载包&#xff0c;可在线下&#xff0c;可自行下 5、下载完可正常打开自己的工程项目 6、解压文件到Keil安装路径下C:\Keil_MDK\ARM…

如何利用多线程提高计算密集型任务的性能

文章目录 摘要引言基本概念和原理判断是否适合使用多线程多线程编程中的关键问题设计和实现高效的多线程示例代码QA环节总结未来展望参考资料 摘要 多线程编程可以充分利用多核处理器的计算能力&#xff0c;从而显著提高计算密集型任务的性能。本篇文章将介绍多线程编程的基本…

基于STM32的智能照明系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 光照传感器数据采集照明控制实现自动亮度调节与手动控制应用场景结论 1. 引言 智能照明系统通过传感器实时监测环境光照度&#xff0c;并根据光线强度自动调整灯光亮度&#xff0c;达到…

【Xcode Command Line Tools】安装指南

安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools

【C++】透过STL源代码深度剖析vector的底层

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f525; 所属专栏&#xff1a;C深入学习笔记 &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 参考博客&#xff1a;【C】透过STL源…