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

JavaScript(二)

二 、js语法

2.5 JSON

2.5.1 JSON简介

  • JavaScript Object Notation,简称JSON。中文含义为“JavaScript 对象表示法”。

  • JSON 是一种轻量级的数据交换格式, 通常用于存储和网络传输。 另外一个数据交换格式是XML。

  • JSON的本质是字符串文本

  • 是独立的语言,易于理解,因此被任何编程语言支持。

2.5.2 JSON语法

  • 数据是键/值对键/值对可以嵌套。 键与值之间使用冒号分隔

  • 数据之间使用逗号分隔

  • 花括号保存对象,对象可以包含多个键/值对

  • 方括号保存数组,数组可以包含多个对象

JSON对象,演示如下:

{"name": "zhangsan", "age": 21, "gender": "f"}或
{"name": "zhangsan", "age": 21, "gender": "f", "hobby":["movie","music","book"],"sayHi":function(){console.log(this.name)}
}或
{"weibo": "https://weibo.com/leiqikui","github": "https://github.com/leiqikui","qq": {"number": "376601179","email": "376601179@qq.com"}
}

 注意:JSON对象不是JS对象,JS对象也不是JSON对象。只是写法相似。

 JSON数组,演示如下:

[
{"name": "zhangsan", "age": 21, "gender": "f", "fn1":function(){console.log(this.name)}},
{"name": "michael", "age": 22, "gender": "m", "fn1":function(){console.log(this.name)}},
{"name": "wangwu", "age": 20, "gender": "f", "fn1":function(){console.log(this.name)}}
]或者["a","b","c"]

2.5.3 JSON对象转JS对象

        JSON对象,本质上是一个字符串;JS对象是{}形式定义的对象,可以访问属性,方法等操作。

        JSON对象,如果想要转成JS对象,可以使用JS里内置函数JSON.parse().

var text = '{ "sites" : [' +'{ "name":"Runoob" , "url":"www.runoob.com" },' +'{ "name":"Google" , "url":"www.google.com" },' +'{ "name":"Taobao" , "url":"www.taobao.com" } ]}';obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.sites[1].name + " " + obj.sites[1].url;

2.5.4 JS对象转成JSON对象

使用内置函数JSON.stringify()。

var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'  一个JSON格式的字符串

2.5.5 JSON字符串与JS对象的区别

1)本质不同

  • JSON是一种数据格式,是一个字符串

  • JavaScript是一种编程语言,用于编写程序代码。

2)语法不同

  • JSON的属性名必须有双引号,值如果是字符串也必须是双引号。 值不支持函数,日期

  • JavaScript的语法更加灵活,支持多种数据类型和操作

3)用途区别‌:

  • JSON主要用于数据交换和存储,常用于网络传输。

  • JavaScript主要用于编程,实现网页的动态效果和功能。

2.6 运算符

2.6.1 算术运算符

+:   +号两边是数字,则进行加法运算,只要有一个是字符串,就做字符串拼接操作
-:
*:  
/:    js中的除法运算,如右所示:    5/2  等于2.5      即正常进行除法运算
%:    5%2  等于1
++    i++  相当于i=i+1
--    i-- 相当于i=i-1

2.6.2 关系运算符

>
>=
<
<=
==
!=
全等
===
不全等
!==

用于判断两边数值的关系,返回值是boolean,要么是true,要么是false

2.6.3 逻辑运算符

&&

||

    //逻辑运算符var a = 1;var b = 2;var c = 3;var d = 4;//先验证&&var r1 =a>b&&c++<d;console.log(r1,c); //false 3var r2 =a<b||c++<d;console.log(r2,c);// true 3

2.6.4 条件表达式

 1. 三目运算表达式
    表达式?表达式1:表达式2
    当问号之前的表达式成立时,就使用表达式1的结果,否则使用表达式2的结果
2. 关系运算表达式,也叫条件表达式    

    // 关系运算符: > >= <= < == != ,===,!==var x1 = 4;var x2 = 5;var re1 = x1 == x2;console.log(re1);var re2=x1!=x2;// 全等: 判断值与类型,值和类型一样时,才会返回true;var m1 = true;var n1 = 1;var re3 = m1 === n1 ;var re33 = m1==n1;// 不全等: 只要有一个不一样,就返回true。var re4 = m1!==n1;console.log(re3,re4,re33);// 支持三目运算符。var re5= x2<x1?"王大锤":"张三";x1 === x2;console.log(re5);

2.7 流程控制语句

2.7.1 分支结构

在 JavaScript 中,我们可使用以下分支结构的语句:

  • if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码

 if (condition){
    当条件为 true 时执行的代码
}

 if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码

if (condition){
    当条件为 true 时执行的代码
}else{
    当条件不为 true 时执行的代码
}

if...else if....else 语句- 使用该语句来选择多个代码块之一来执行

 if (condition1){
    当条件 1 为 true 时执行的代码
}else if (condition2){
    当条件 2 为 true 时执行的代码
}else{
  当条件 1 和 条件 2 都不为 true 时执行的代码
}

 switch 语句 - 使用该语句来选择多个代码块之一来执行

 switch(n){
    case 1:
        执行代码块 1
        break;
    case 2:
        执行代码块 2
        break;
    default:
        与 case 1 和 case 2 不同时执行的代码
}

2.7.2 循环结构

JavaScript 支持不同类型的循环:

  • for - 循环代码块一定的次数

 for (语句 1; 语句 2; 语句 3){
    被执行的代码块
}

for/in - 循环遍历对象的属性  

<body><p>点击下面的按钮,循环遍历对象 "person" 的属性。</p><button onclick="myFunction()">点击这里</button><p id="demo"></p><script>function myFunction(){var x;var txt="";var person={fname:"Bill",lname:"Gates",age:56}; for (x in person){txt=txt + person[x];}document.getElementById("demo").innerHTML=txt;}</script>
</body>

 while - 当指定的条件为 true 时循环指定的代码块

 while (条件){
    需要执行的代码
}

 do/while - 同样当指定的条件为 true 时循环指定的代码块

 do{
    需要执行的代码
}while (条件);

2.7.3 break和continue

break 语句用于跳出循环。

continue 语句中断当前的循环中的迭代,然后继续循环下一个迭代。

2.7.4 JS的条件表达式

boolean的true,就是true
任意非null值,都是true


null:  false
""  :   false
undefined:  false
NaN:     false
0:      false

3.1 BOM模型简介

        browser object model(浏览器对象模型),简称bom模型。即javascript设计了一个window对象,可以通过这个对象来操作浏览器,从而可以让js与浏览器产生交互行为。

3.2 window对象

  • 所有浏览器都支持 window 对象。它表示浏览器窗口。

  • 所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。

  • 全局变量是 window 对象的属性。

  • 全局函数是 window 对象的方法。

  • 甚至 HTML DOM 的 document 也是 window 对象的属性之一

  • window的常用属性和方法

- 对话框方法window.alert():window.confirm():window.prompt("sometext","defaultvalue");
- history: 历史记录window.history.back();window.history.forward();window.history.go(1);    // -1 表示后退, 1表示前进,0表示刷新
- location: 窗口文件地址location.href;location.hostname;location.pathname;location.port;location.protocol;
- screen:  当前屏幕对象screen.availWidth - 可用的屏幕宽度screen.availHeight - 可用的屏幕高度window.screen.width;window.screen.height;screen.colorDepth:色彩深度screen.pixelDepth:色彩分辨率
- navigator: 浏览器信息navigator.userAgent;注意:不要依赖此属性返回正确的浏览器信息。在大多数浏览器(如Firefox, Chrome, Safari, Opera和Internet Explorer)中,返回的字符串是都是统一的。
- document: 当前窗口显示的HTML对应的文档对象- setInterval()/clearInterval():周期性时钟方法
- setTimeout()/clearTimeout():一次性时钟

3.2.1对话框测试

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><button onclick="testAlert()">测试alert:用于提示警告</button><button onclick="testConfirm()">测试确认框:有确认和取消的提示框</button><button onclick="testPrompt()">测试输入框</button></body>
<script>function testAlert(){window.alert("hello world") //会阻塞后续的代码执行alert("hello js");var name = "高圆圆";alert(name);console.log("micheal"); // 将内容打印到调试页面的控制台上}function testConfirm(){var f = window.confirm("您确认要删除吗");if(f){console.log("正在向服务器提交数据....")}else{console.log("不删除了...")}}function testPrompt(){// 输入框: 第一个参数是提示文字, 第二个参数是输入框里的默认值。var username = prompt("请输入用户名: ","张三");// 输入框有确认和取消按钮,确认表示提交输入框里的信息并返回,可能是具体值,也可能是// 空字符串。 取消按钮,提交的是null;console.log(username);}
</script></html>

3.2.2  历史记录history和location

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><button onclick="f1()">history</button><button onclick="f2()">前进</button><button onclick="f3()">后退</button><button onclick="f4()">location</button></body><script>/*location: window的一个属性对象,用来表示浏览器的地址信息*/function f4(){console.log(window.location);//获取具体的url;console.log(location.href);console.log(location.hostname);console.log(location.pathname);console.log(location.protocol);//修改location的值,跳转到对应网页location.href="http://www.baidu.com";}/*history是window的一个属性,用来表示浏览器访问的历史记录*/function f1(){var his = window.history;console.log(his);//向前his.forward();}function f2(){// history.forward(); //相当于浏览器的右箭头history.go(1)}function f3(){// history.back();//相当于浏览器的左箭头history.go(-1);}</script>
</html>

 3.2.3 windows的screen对象

    //从window上获取screen屏幕对象console.log(window.screen.availHeight);console.log(window.screen.availWidth);console.log(window.screen.height);console.log(window.screen.width);console.log(window.screen.colorDepth);//色彩深度console.log(window.screen.pixelDepth);//色彩分辨率console.log(navigator.userAgent);

3.3 JavaScript 计时事件

在 JavaScript中,可以做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。

在 JavaScript 中使用计时事件是很容易的,两个关键方法是:

  • setTimeout() - 在指定的毫秒数后执行一次指定的代码。 我们可以称之为一次性时钟

  • setInterval() - 间隔指定的毫秒数重复地执行指定的代码。 我们可以称之为周期性时钟

注意: setInterval() 和 setTimeout() 是 HTML DOM Window对象的两个方法。

3.3.1 setTimeout() 方法

var myVar= window.setTimeout(Function, milliseconds);

第一个参数:要执行的代码
第二个参数:执行代码的延迟时间,单位是毫秒

         也可以不用声明变量;不过如果你想要取消这个时钟,就需要定义变量来存储这个时钟,以便取消。

那么,该如何停止执行呢?

        clearTimeout() 方法用于停止执行setTimeout()方法的函数代码。当然,需要在setTimeout()还为执行任务前,调用该方法。

语法如下:

window.clearTimeout(timeoutVariable)

3.3.2 setInterval() 方法

window.setInterval(Function,milliseconds);

第一个参数:要执行的代码
第二个参数:重复执行的间隔时间,单位是毫秒

那么,该如何停止执行呢?

clearInterval() 方法用于停止 setInterval() 方法执行的函数代码。

语法如下:

window.clearInterval(intervalVariable); 

3.3.3 计时器测试

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><button onclick="f1()">一次性时钟:让代码延迟指定的毫秒数后再执行</button><button onclick="f3()">取消一次性时钟</button><button onclick="f2()">周期性时钟:让代码延迟指定的毫秒数,并建个制定的毫秒数重复执行</button><p id = "p1"></p><button onclick="f4()">取消周期性时钟</button>
</body>
<script>var num;function f1(){/*setTimeOut(timeHandler,delay)第一个参数:timeHandler, 要执行的代码逻辑。可以是一个函数。第二个参数: delay,指定延迟的时间。单位是毫秒*/num=setTimeout(function(){alert("Hello world")},3000);console.log(num);}function f3(){/*一次性时钟还可以在执行前进行取消操作的*/window.clearTimeout(num);}var p =document.getElementById("p1");var inr;function f2(){/*setInterval(timeHandler,period)第一个参数:timeHandler, 要重复执行的代码逻辑。可以是一个函数。第二个参数: 间隔时间,单位是毫秒*/inr = setInterval(function(){var d = new Date();var hour = d.getHours();var min = d.getMinutes();var second = d.getSeconds();if(second<10){var time = hour+":"+min+":0"+second;}else{var time = hour+":"+min+":"+second;}p.innerText = time;},1000)}function f4(){clearInterval(inr);alert("取消");}</script>
</html>

四 DOM模型

4.1 DOM模型简介

DOM模型,全名document object model

        javaScript将HTML的所有标记封装到一个对象(document)上,在这个对象身上维护着HTML的所有层次的标记,以及关系。这样,javaScript就可以通过document对象,来访问整个HTMl文档里的所有元素了。

整个DOM对象可以看成是一个树形结构,参考下图:

        当浏览器加载页面时,会创建一个document对象,用于封装和操作当前页面的所有的HTML、CSS等代码。

  • js可以改变当前页面的HTML的元素

  • js可以改变当前页面的HTML的属性

  • js可以改变当前页面的CSS样式

  • js可以对当前页面的事件作出响应

DOM模式被构建成对象的树,这棵树的根就是document对象。提供了

  • 查找节点

  • 读取节点

  • 修改节点

  • 创建新节点

  • 删除节点操作

4.2 DOM查找节点

如果想要操作HTML的元素,比如添加元素,删除元素等。那么就需要先查找元素。

通过 id 查找 HTML 元素

  • var x=document.getElementById("元素的id属性值")

  • 如果找到该元素,则该方法将以对象的形式返回该元素

  • 如果未找到该元素,则返回 null。

通过标签名查找 HTML 元素

  • getElementsByTagName("标签名"):该方法可以使用document调用,也可以使用节点对象调用。

  • 返回的是伪数组对象。没找到,数组长度为0。

  • 伪数组可以通过下标访问元素,可以访问length属性,其他的数组方法,不能使用。

通过类名查找 HTML 元素

  • getElementsByClassName("类属性值"):该方法可以使用document调用,也可以使用节点对象调用

  • 返回的是伪数组对象。

通过层次关系查找 HTML 元素

  • parentNode:当前节点的父节点。即上一层的节点对象

  • childNodes:下一层的子节点,返回的依然是一个伪数组。 注意换行特点

  • children:

  • firstChild:第一个子节点

  • firstElementChild

  • lastChild:最后一个子节点

  • lastElementChild:

  • nextSibling:返回元素的下一个兄弟节点

  • previousSibling:返回元素的上一个兄弟节点

4.3 元素相关信息

  • 常用属性

 - nodeName:节点的名称
   树形中的每一个节点都是有名称的,
   如果是文本节点,名称为#text
   如果是文档节点,名称为#document
- nodeType: 节点的类型。返回的是一个数字
   1:  元素节点
   2:  属性节点
   3:  文本节点
   8:  注释节点
   9:  文档节点
- nodeValue: 节点的值
    元素节点的 nodeValue 是 undefined 或 null
    文本节点的 nodeValue 是文本本身
    属性节点的 nodeValue 是属性值

- innerText:  
    获取的是元素中的所有文本内容
- innerHTML:  
    获取的是元素中的所有信息,包括标记

 - getAttribute(属性名称):根据属性名称获取属性的值
- setAttribute():设置属性的值
- removeAttribute():

4.4 节点创建与删除

创建节点

 - 创建元素节点。当然可以设置上相关属性。
    document.createElement("新节点名称")
- 创建文本节点
   document.createTextNode("文本内容");

添加节点

 - appendChild(newNode):  
  将新元素作为父元素的最后一个子元素进行添加。   用父元素调用该方法
- insertBefore(newNode,reNode):  
  将新元素插入到某一个子元素的前面。   用父元素调用该方法
  reNode:所依赖的子元素  

 移除节点: 如需删除 HTML 元素,您必须清楚该元素的父元素:

 - removeChild(childNode)
  删除节点操作,只能是删除某一个节点的子节点。

 替换节点:

- replaceChild(newChild,oldChild)
  使用newChild新元素,替换掉oldChild旧元素

4.5 表单操作

4.5.1 表单的获取

document.表单名称
document.getElementById(表单id值)

document.forms['表单名称']
document.forms[index索引]   //从0开始

4.5.2 input的获取方式

比如 text、password、hidden、textarea等, 下面的前两种方式用的比较多。

获取方式演示
通过id获取document.getElementById(id值)
通过form.名称获取myform.元素名称 (name属性值)
通过name获取document.getElementsByName(name属性值)[索引] //索引从0开始
通过tagName获取document.getElementByTagName(input) [索引] //索引从0开始

4.5.3 获取单选按钮和多选按钮

注意:name值相同的单选按钮为一组。

(1)获取按钮组

document.getElementsByName(`name值`)

(2)遍历每个按钮,并查看按钮元素的checked属性。

 true表示被选中,false表示未被选中

(3)属性checked

设置选中状态:   checked='checked'   或  checked='true'  或者  checked
设置未选中:    不添加checked属性,或者checked='false'

4.5.4 获取下拉菜单

1)获取select对象

var mySelect = document.getElementById('mySelect')

(2)获取选中项的索引

var index = mySelect.selectedIndex;

(3)获取选中项的value

var value = mySelect.options[index].value
​

注意: 如果没有设置value属性,则拿到的是标签体里的文本 

(4)直接获取选中项的text

var text = mySelect.options[index].text

(5)属性selected

设置选中状态:   selected='selected'   或者 selected='true'    或 selected
设置未选中:     不设置selected属性即可。

4.5.5 提交表单方式 

  1. 使用普通按钮 + onclick事件+事件函数中编写代码: 函数内调用表单对象.submit()

  2. 使用submit按钮 +onlick=return 函数() +函数中编写代码, 最后必须返回:true或者false

  3. 使用submit按钮/图片提交按钮+οnsubmit=return 函数()+函数中编写代码, 最后必须返回:true或者false

五 事件Event

5.1 事件简介

当用户在与浏览器进行交互的瞬间,或者浏览器自身发生的一些事情,我们称之为javaScript事件。

比如打开某一个网页,浏览器加载完成后会触发load事件,当鼠标悬浮于某一个元素上时会触发hover事件,当鼠标点击某一个元素时会触发click事件等等。JS与HTML之间的交互正是通过事件(Event)来实现的。或者说,事件是JavaScript和DOM之间进行交互的桥梁。

事件可以概括为以下几个部分

  • 事件源 : 触发事件的 元素/标签/节点

  • 事件类型: 触发的是什么事件,比如单击,双击,鼠标移入移出等

  • 事件处理程序:触发事件后要执行的逻辑代码

  • 事件监听:谁管这个事情,谁监听?

事件的作用: 

1. 验证用户输入的数据
2. 增加页面的动态效果
3. 增强用户的体验度 

5.2 事件模型

5.2.1 原始事件模型(DOM0级)

        这是一种被所有浏览器都支持的事件模型,对于原始事件而言,没有事件流,事件一旦发生将马上进行处理,有两种方式可以实现原始事件:

(1)在html代码中直接指定属性值:`<button id="demo" type="button" onclick="doSomeTing()" `/>  
(2)在js代码中为 document.getElementsById("demo").onclick = doSomeTing()

 优点:

所有浏览器都兼容

 缺点:

1)逻辑与显示没有分离;
2)相同事件的监听函数只能绑定一个,后绑定的会覆盖掉前面的,
  如:a.onclick = func1; a.onclick = func2;将只会执行func2中的内容。
3)无法通过事件的冒泡、委托等机制(后面会讲到)完成更多事情。

 因为这些缺点,虽然原始事件类型兼容所有浏览器,但仍不推荐使用。

5.2.2 DOM2事件模型

此模型是W3C制定的标准模型,现代浏览器(IE6~8除外)都已经遵循这个规范。这个事件模型,引入了事件流的概念。

事件流 ,指的就是一次事件的发生包含三个过程:(1).事件捕获阶段,(2).事件目标阶段,(3).事件冒泡阶段。如下图所示:

事件捕获:

        当某个元素触发某个事件(如onclick),顶层对象document就会发出一个事件流,随着DOM树的节点向目标元素节点流去,直到到达事件真正发生的目标元素。在这个过程中,事件相应的监听函数是不会被触发的。

事件目标:

        当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。

事件冒泡:

        从目标元素开始,往顶层元素传播。途中如果有节点绑定了相应的事件处理函数,这些函数都会被一次触发。

        所有的事件类型都会经历事件捕获,但是只有部分事件会经历事件冒泡阶段,例如submit事件就不会被冒泡。

标准的事件监听器该如何绑定:

  • addEventListener("eventType","handler","true|false");

  • removeEventListner("eventType","handler","true!false");

第一个参数eventType指事件类型,  注意不要加‘on’前缀,与IE下不同
第二个参数是处理函数,
第三个即用来指定是否在捕获阶段进行处理,一般设为false来与IE保持一致(默认设置),除非你有特殊的逻辑需求。
监听器的解除也类似:

事件的传播是可以阻止的:   

  • 在W3c中,使用stopPropagation()方法   

  • 在IE下设置cancelBubble = true;   

在捕获的过程中stopPropagation()后,后面的冒泡过程就不会发生了。

5.3 事件分类

        我们知道,事件就是用户或者浏览器自身执行的某些动作,行为,例如click,load,mouseover都是事件的名字,而响应某一个事件要执行的函数,就是这个事件的事件处理程序。想要将事件处理程序与该事件关联上,或者理解为绑定,我们需要在每个事件的名字前面添加单词on。比如click事件,如果想要关联(绑定)事件处理程序,我们需要写成onclick形式。 再比如onloadonmouseover等。

我们也可以统称为绑定事件。 绑定事件分类如下:

鼠标绑定事件

属性描述
onclick当用户点击某个对象时调用的事件句柄。
oncontextmenu在用户点击鼠标右键打开上下文菜单时触发
ondblclick当用户双击某个对象时调用的事件句柄。
onmousedown鼠标按钮被按下。
onmouseenter当鼠标指针移动到元素上时触发。
onmouseleave当鼠标指针移出元素时触发
onmousemove鼠标被移动。
onmouseover鼠标移到某元素之上。
onmouseout鼠标从某元素移开。
onmouseup鼠标按键被松开。

 键盘绑定事件

属性描述
onkeydown某个键盘按键被按下。
onkepress某个键盘按键被按下并松开。
onkeyup某个键盘按键被松开。

表单绑定事件

属性描述
onblur元素失去焦点时触发
onchange该事件在表单元素的内容改变时触发( <input>, <keygen>, <select>, 和 <textarea>)
onfocus元素获取焦点时触发
onfocusin元素即将获取焦点时触发
onfocusout元素即将失去焦点时触发
oninput元素获取用户输入时触发
onreset表单重置时触发
onsearch用户向搜索域输入文本,并回车时触发 ( <input="search">)
onselect用户选取文本时触发 ( <input> 和 <textarea>)
onsubmit表单提交时触发

5.4 event对象

当事件触发后,会自动产生一个event对象。

5.4.1 常用属性

属性描述
bubbles返回布尔值,用于判断事件是否冒泡
cancelBubble取消事件的冒泡
currentTarget返回在事件流中触发事件的元素。
target / srcElement返回触发此事件的元素(事件的目标节点)。
type返回当前 Event 对象表示的事件的名称。
clientX返回当事件被触发时,鼠标指针的水平坐标。
clientY返回当事件被触发时,鼠标指针的垂直坐标。
cancelable返回事件是否可以用preventDefault()方法来取消默认的动作;

5.4.2 常用方法

方法描述
preventDefault()阻止元素默认的行为,如链接的跳转、表单的提交;
stopPropagation()阻止事件冒泡

http://www.mrgr.cn/news/33269.html

相关文章:

  • 【Linux 从基础到进阶】 AWS云服务在Linux上的应用
  • C\C++内存管理详解
  • PHP在将数据存储到数据库之前如何转义数据
  • Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+源码+数据库)
  • 算法题之每日温度
  • python发送邮件 - email smtplib
  • SOMEIP_ETS_122: SD_Interface_Version
  • Linux文件IO(七)-复制文件描述符
  • Codeforces Round 974 (Div. 3) B. Robin Hood and the Major Oak
  • 通信工程学习:什么是NFV网络功能虚拟化
  • C++primer第十一章使用类(矢量随机游走实例)
  • 详细分析Spring的动态代理机制
  • LeetCode题练习与总结:回文链表--234
  • 栈和队列(选择题)
  • 图像生成大模型Imagen
  • 探索微软Copilot Agents:如何通过Wave 2 AI彻底改变工作方式
  • C++学习笔记----7、使用类与对象获得高性能(二)---- 理解对象生命周期(7)
  • 数据结构--树和二叉树
  • java并发编程
  • 如何查看本机配置了哪些端口转发