JavaScript——函数、事件与BOM对象

一、系统函数(JS中预置的函数)

JS的预置函数在遇到非数字字符时会停止解析 

parseInt    转整型
parseFloat  转浮点型
isNaN       !isNaN("10") 检测是否纯数字
eval        把字符串转成算式并计算

1.parseInt(string, radix);

语法:

  • string:要解析的字符串。
  • radix:可选参数,表示要解析的数字的基数。取值范围从 2 到 36。如果未指定或值为 0,则基数会根据字符串的格式自动确定。当基数为 10 时(默认值),解析的字符串可以包含小数点。
console.log(parseInt("12.5")); // 12
console.log(parseInt("1a2.5")); // 1
console.log(parseInt("10")); // 10
console.log(parseInt("10.00")); // 10
console.log(parseInt("10.95")); // 10
console.log(parseInt("34 45 66")); // 34
console.log(parseInt("   60   ")); // 60
console.log(parseInt("40 years")); // 40
console.log(parseInt("He was 40")); // NaN,因为字符串中没有数字开头
console.log(parseInt("4.5")); // 4
console.log(parseInt("0x10")); // 16,因为 "0x" 表示十六进制
console.log(parseInt("10.69", 2)); // 2 解析小数点前的二进制数
console.log(parseInt("10", 2)); // 2

2.parseFloat(string);

console.log(parseFloat("10")); // 10
console.log(parseFloat("10.00")); // 10
console.log(parseFloat("10.95")); // 10.95
console.log(parseFloat("34 45 66")); // 34
console.log(parseFloat("   60   ")); // 60
console.log(parseFloat("40 years")); // 40
console.log(parseFloat("He was 40")); // NaN,因为字符串中没有数字开头
console.log(parseFloat("-4.5")); // -4.5
console.log(parseFloat("0x10")); // 0
console.log(parseFloat("10.00px")); // 10

3.isNaN(value);

console.log(!isNaN("10")); // true
console.log(isNaN("10")); // false

4.eval(expression);

console.log(eval("2+3*5")); // 17

注意事项: 

  • 安全性:使用 eval() 可能导致安全问题,因为它可以执行任何传递给它的字符串。如果字符串来自不可信的源,可能会导致代码注入攻击。
  • 性能:eval() 的执行速度通常比直接写代码慢,因为它需要在运行时解析和执行字符串。
  • 调试:使用 eval() 可能会使调试变得更加困难,因为错误信息会指向 eval() 调用,而不是实际的代码位置。

二、自定义函数

自定义函数通俗理解就是:自己封装函数给自己使用。

注意点:

1.js中如果函数名重复,会发生覆盖(注意函数名不要重复,也不要跟变量重复)

2.实参与形参可以不对应,执行结果与预期会不符(使用时,形参要与实参个数对应)

两种函数格式:

1.声明式函数

声明式函数对象:
function 函数名(参数列表 ...){
    doSomething.......
    // 如果需要返回值 直接加return
    return 返回的数据;
}
function myFun(num1) {
  console.log(num1);
}
    
function myFun(num1, num2) {
  // debugger
  // console.log(num1 + num2);
  return num1 + num2;
}
let total = myFun(10, 20);
console.log(total); // 30

2.匿名函数 

匿名函数定义:
let 变量名(函数名) = function(参数列表...){
    // console.log(a+b);
    return a + b;
}
let myFun = function (a, b) {
  return a + b;
};

let total = myFun(5, 6);
console.log(total); // 11

三、变量作用域:

全局变量:整个页面都可以使用,可以在多个函数内共享。
局部变量:函数内可以使用。

函数内如果没声明直接使用的变量 会被js解析器补全为全局变量(不要用这个特性)。

// 全局变量:记录程序执行过程中的数据
let myNum = 1;
let myFun = function () {
  myNum++;
  console.log(myNum); // 2
  // 局部变量:仅对当前的函数体生效
  // var myNum2 = 5;
  // let myNum2 = 5;
  // 如果没有添加let,会自动补全成全局变量(避免在函数内,不声明就使用变量,生成的是全局变量)
  myNum2 = 5;
  console.log(myNum2); // 5
};
myFun(); 
console.log(myNum); // 2
console.log(myNum2); // 5

四、JS断点调试

在代码中需要加断电的地方协商debugger; 如果触发代码时会进入断点

F11 一行一行看

F8 跳过断点

五、事件

事件就是js中触发函数的机制。定义出了用户交互的常用事件,来触发自定义函数。

(一)html元素--- >事件--- >函数

<body>
  <input type="button" value="点我" onclick="myTest()" />
</body>
<script>
  function myTest() {
    console.log("运行了......");
  }
</script>

(二)编写JS交互效果的流程(套路)

考虑流程:
1.在哪个元素上加哪个事件,触发哪个函数

操作页面的元素:DOM编程


2.获取哪个元素,操作哪个属性,属性改成什么值

获取元素:doucument.getElementById("id值")  可以获取页面中所有元素 需要搭配id使用

操作属性:
     元素.属性             DOM通用操作
     写操作                  元素.属性 = xxxx
     读操作                  元素.属性
     html元素的属性都可以操作
 
常用属性:属性值参考属性本身的规则
      value       表单元素的值
      type         表单元素类型
      id             元素id
      style        style中还有其他的子样式 参考css
                      color 文字颜色         
                      backgroundColor 背景颜色 
 innerHTML    标签体中的内容 适用于所有的双标签


JS中经常有效果切换的场景(执行的代码相同,赋值不同)

    可以在函数中加上形参,调用时传入实参,例如:οnmοuseοver="changeBGC('green')" 
    实参数据类型:

  •     如果是字符串            'green'
  •     如果是数字                123
  •     如果是boolean值       true 
  •     如果修改的元素与触发的元素是同一个,实参此时可以传this,表示发生事件的元素

传值方式:

1.函数调用时主动传值

2.传this,从元素身上读值,例如select元素可以有多个值,可以借助元素传值

(三)JS中常用事件

1. onclick 鼠标点击事件

<html lang="en">
  <head>
    <style>
      .pre {
        width: 100px;
        height: 50px;
      }

      .myDiv {
        width: 100px;
        height: 100px;
        border: 1px solid black;
      }
    </style>
  </head>
  <body>
    <!-- 需求:点击按钮后改变输入框的内容 -->
    <input id="president" type="text" value="拜登" class="pre" />
    <input type="button" value="换总统" onclick="changePresident()" />
    <hr />

    <!-- 需求:点击按钮后更改div的背景颜色 -->
    <div id="myDiv" class="myDiv"></div>
    <input type="button" value="换颜色" onclick="changeColor()" />
    <hr />

    <!-- 需求:点击按钮后更改标题文字 -->
    <h1 id="title">总统选举进行中......</h1>
    <input type="button" value="选举结束" onclick="changeTitle()" />
  </body>
  <script>  
    function changePresident() {
      let pre = document.getElementById("president");
      pre.value = "特朗普";
      pre.type = "button";
      pre.style.color = "red";
      pre.style.fontWeight = "bold";
      pre.style.fontSize = "30px";
    }

    function changeColor() {
      let myDiv = document.getElementById("myDiv");
      //   myDiv.style.backgroundColor = "green";
      myDiv.style.backgroundColor = "#FF0000";
      
      // 简写:
      document.getElementById("myDiv").style.backgroundColor = "green";
    }

    function changeTitle() {
      let title = document.getElementById("title");
      title.style.color = "red";
      title.innerHTML = "特朗普当选美国总统!";
    }
  </script>
</html>

2. onmouseover 鼠标移入;onmouserout 鼠标移出

<style>
    .mycls {
      width: 100px;
      height: 100px;
      border: 1px solid black;
    }
  </style>
</head>
<body>
  <!-- 需求:鼠标悬浮与离开都更改div的背景色 -->
  <div
    id="myDiv"
    class="mycls"
    onmouseover="changeBGC('blue',this)"
    onmouseout="changeBGC('white',this)"
  ></div>
</body>
<script>
  function changeBGC(currentColor, myObj) {
    myObj.style.backgroundColor = currentColor;
  }
</script>

3. onfocus 获得焦点;onblur 失去焦点

焦点事件主要用在表单元素

输入框同一时间只有一个框获得输入提示符,获得输入提示符的叫获得焦点

通常用鼠标触发,也可以被tab键触发

<body>
  <!-- 需求:输入内容时,文字颜色是红色;鼠标点击外部时,文字内容为黑色 -->
  <input
    type="text"
    onfocus="changeTextColor('red',this)"
    onblur="changeTextColor('black',this)"
  /><br />
  <input
    type="text"
    onfocus="changeTextColor('green',this)"
    onblur="changeTextColor('black',this)"
  /><br />
  <input
    type="text"
    onfocus="changeTextColor('blue',this)"
    onblur="changeTextColor('black',this)"
  />
</body>
<script>
  function changeTextColor(currentColor, myObj) {
    myObj.style.color = currentColor;
  }
</script>

4. onchange 内容改变

<body>
  <!-- 需求:文本框内容复制 -->
  <input type="text" onchange="setTextVal(this)" />
  <input id="myText" type="text" />
</body>
<script>
  function setTextVal(myObj) {
    document.getElementById("myText").value = myObj.value;
  }
</script>

内容改变经常用在输入框和下拉列表中

与失去焦点不同的是,onchange在失去焦点时,并且内容发生改变了,才会触发

需求一:文本框内容复制
<body>
  <input type="text" onchange="getTextVal(this)" />
</body>
<script>
  function getTextVal(myObj) {
    console.log(myObj.value);
  }
</script>

 

需求二:下拉列表选取的内容传入后台
<body>
  <!-- 需求:下拉列表选取的内容传入后台 -->
  请选择希望的旅游地点:
  <select onchange="showAreaId(this)">
    <option disabled selected>---请选择---</option>
    <option value="001">北京</option>
    <option value="002">上海</option>
    <option value="003">深圳</option>
  </select>
  <h1>要发送给后台的值是:<span id="showAreaSpan"></span></h1>
  <hr />  
</body>
<script>
  function showAreaId(myObj) {
    console.log(myObj.value);
    document.getElementById("showAreaSpan").innerHTML = myObj.value;
  }
</script>

需求三:修改div的背景颜色
<body>
  <!-- 需求:修改div的背景颜色 -->
  请选择页面主题:<select onchange="changeDivGBC(this)">
    <option disabled selected>---请选择---</option>
    <option value="lightgreen">清新绿</option>
    <option value="orange">温暖橙</option>
    <option value="gray">简约灰</option>
  </select>
  <div
    id="myDiv"
    style="width: 200px; height: 200px; border: 1px solid black"
  ></div>
</body>
<script>
  function showAreaId(myObj) {
    console.log(myObj.value);
    document.getElementById("showAreaSpan").innerHTML = myObj.value;
  }
</script>

5. onload 加载事件

页面加载顺序 从上到下读取和加载

Cannot set properties of null (setting 'value')  相当于空指针异常
Cannot set properties of undefined               变量未定义

onload不常用,一般会把script标签放在body标签下边,保证页面元素加载完成再进行赋值

<script>
    function myInit() {
      document.getElementById("myText").value = "早上好";
    }
  </script>
  <body onload="myInit()">
    <input id="myText" type="text" />
  </body>

6.键盘事件——onkeydown:键盘按下;onkeyup:键盘弹起

系统识别按键,每个按键都有按键码

键盘按下:       onkeydown     阻止某些按键生效
键盘弹起:       onkeyup          读取生效的数据
    

onkeydown            键盘按下
onkeyup                 键盘弹起
// onkeypress         复合事件 很少用

<body>
  <input type="text" onkeyup="getTextVal(event)" />
</body>
<script>
  function getTextVal(event) {
    console.log(event.keyCode);
  }
</script>

7.onkeyup 键盘弹起与正则表达式进行输入框校验

onkeyup表示每次输入后,获取当前值的事件,通常搭配正则表达式来进行输入框的校验

正则表达式:

 

 

// js中 正则表达式 是在两个//中间
let myReg =  /^1(3|4|5|7|8)\d{9}$/
// test 检测字符串是否符合正则表达式
console.log(myReg.test("23333333333"));

输入框校验: 

<body>
  请输入手机号:<input
    id="phoneText"
    type="text"
    onkeyup="phoneCheck()"
  /><span id="phoneSpan"></span>
</body>
<script>
  function phoneCheck() {
    // 正则表达式
    let myReg = /^1(3|4|5|7|8)\d{9}$/;
    // 获取输入口当前值
    let phoneTextVal = document.getElementById("phoneText").value;
    // 校验
    if (myReg.test(phoneTextVal)) {
      console.log("格式正确");
      document.getElementById("phoneSpan").innerHTML = "格式正确";
      document.getElementById("phoneSpan").style.color = "green";
    } else {
      console.log("格式错误");
      document.getElementById("phoneSpan").innerHTML = "格式错误";
      document.getElementById("phoneSpan").style.color = "red";
    }
  }
</script>

 

8.综合案例——表单校验

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style>
      img {
        vertical-align: auto;
        display: none;
      }
    </style>
  </head>
  <body>
    <form
      action="/myserver"
      onsubmit="return allCheck()"
      method="get"
      enctype="application/x-www-form-urlencoded"
    >
      <table>
        <tr>
          <td>请输入姓&emsp;名:</td>
          <td>
            <input
              id="usernameId"
              name="username"
              type="text"
              onchange="usernameCheck()"
            /><img id="usernameImg" src="../imgs/wrong.png" />
          </td>
        </tr>
        <tr>
          <td>请输入手机号:</td>
          <td>
            <input
              id="phoneId"
              name="userPhone"
              type="text"
              onchange="phoneCheck()"
            /><img id="phoneImg" src="../imgs/wrong.png" /><br />
          </td>
        </tr>
        <tr>
          <td>请输入邮箱号:</td>
          <td>
            <input
              id="emailId"
              name="userEmail"
              type="text"
              onchange="emailCheck()"
            /><img id="emailImg" src="../imgs/wrong.png" />
          </td>
        </tr>
      </table>
      <input type="submit" />
    </form>
  </body>
  <script>
    let flag = false;
    function usernameCheck() {
      let myReg = /^\w{3,15}$/;
      let usernameVal = document.getElementById("usernameId").value;
      if (myReg.test(usernameVal)) {
        document.getElementById("usernameImg").src = "../imgs/ok.png";
        flag = true;
      } else {
        document.getElementById("usernameImg").src = "../imgs/wrong.png";
        flag = false;
      }
      document.getElementById("usernameImg").style.display = "inline-block";
      return flag;
    }

    function phoneCheck() {
      let myReg = /^1(3|4|5|7|8)\d{9}$/;
      let phoneVal = document.getElementById("phoneId").value;
      if (myReg.test(phoneVal)) {
        document.getElementById("phoneImg").src = "../imgs/ok.png";
        flag = true;
      } else {
        document.getElementById("phoneImg").src = "../imgs/wrong.png";
        flag = false;
      }
      document.getElementById("phoneImg").style.display = "inline-block";
      return flag;
    }

    function emailCheck() {
      let myReg = /^\w+@\w+.[a-zA-Z]{2,3}(.[a-zA-Z]{2,3})?$/;
      let emailVal = document.getElementById("emailId").value;

      if (myReg.test(emailVal)) {
        document.getElementById("emailImg").src = "../imgs/ok.png";
        flag = true;
      } else {
        document.getElementById("emailImg").src = "../imgs/wrong.png";
        flag = false;
      }
      document.getElementById("emailImg").style.display = "inline-block";
      return flag;
    }

    function allCheck() {
      return usernameCheck() && phoneCheck() && emailCheck();
    }
  </script>
</html>

六、BOM浏览器对象模型

(一)window对象

window对象表示当前窗口;this默认指向当前窗口

window对象中包含其他对象,调用时不需要指明window

注意:

  • alert()函数用于显示一个带有文本消息的模态对话框,用户必须点击“确定”按钮才能继续执行后面的代码。
  • prompt()函数用于显示一个对话框,用户可以输入文本。该函数返回用户输入的字符串,如果用户点击“取消”按钮,则返回null。
  • confirm()函数用于显示一个带有文本消息和“确定”及“取消”按钮的模态对话框。用户必须点击其中一个按钮才能继续执行后面的代码。该函数返回一个布尔值,true表示用户点击了“确定”,false表示用户点击了“取消”。

这些函数会阻止js解析器(js解析器执行引擎读取运行js) 执行,不要使用,一般通过UI库替代

(二)history对象

历史记录对象

对应浏览器前进后退按钮

history 在历史记录里:
        back         前进  
        forward     后退
        go             0表示当前文档    负数表示后退n个文档    正数表示前进n个文档

<body>
  <input type="button" value="后退" onclick="myBack()" />
  当前页面
  <input type="button" value="前进" onclick="myForward()" />
  <input type="button" value="历史移动" onclick="myGo()" />
</body>
<script>
  function myBack() {
    history.back();
  }
  function myForward() {
    history.forward();
  }
  function myGo() {
    history.go(-2);
  }
</script>

(三)location对象

location对象可以可以控制浏览器跳转(意义重大)

location.href属性 浏览器地址栏,可以使用三种路径做页面跳转

location.reload()  刷新当前页面,比history.go(0)更好

页面跳转的方式:

  1. a标签 
  2. 表单提交
  3. location.href    可以使用任意元素做跳转
<body>
  <input type="button" value="跳转页面" onclick="changePage()" />
  <input type="button" value="刷新页面" onclick="reFreshPage()" />
</body>
<script>
  function changePage() {
    // 相对路径
    location.href = "1内容改变事件.html";
    // 相对根路径
    location.href = "/day4_javascript2/1内容改变事件.html";
    // 绝对路径
    location.href = "https://www.baidu.com";
  }
  function reFreshPage() {
    location.reload();
  }
</script>

(四)document对象

document对象用来操作当前页面的html文档

获取元素的常用方法:

getElementById("id值")                                  查找到唯一一个元素
getElementsByClassName("class值")           查找指定class的元素数组
getElementsByTagName("标签名")               查找指定标签名的元素

获取元素的组合使用:

查找第二组元素中的input标签(在元素内部查找指定元素):
 document.getElementById("myDiv").getElementsByTagName("input")    


查找第二组元素中class值是mycls的元素(在元素内部查找指定元素):
 document.getElementById("myDiv").getElementsByClassName("mycls")  

<div>
    <input id="myText" type="text" value="aaa">
    <input class="mycls" type="text" value="aaa">
    <input class="mycls" type="text" value="aaa">
</div>
<div id="myDiv">
    <input id="myText" type="text" value="aaa">
    <input class="mycls" type="text" value="aaa">
    <input class="mycls" type="text" value="aaa">
</div>

遍历数组元素的常用方式:

1.基础for循环(标准 有索引 有元素)

for(let i = 0; i< eles.length;i++){
    eles[i].style.color ="red";
}

2.for in 循环

for(let x in eles){
   // 需要排除掉元素之外的数据
    if(eles[x].style!=undefined){
        eles[x].style.color ="red";
    }
}

3.for of 循环(语法最简单 没有索引)

for(let x of eles){
    console.log(x);
    x.style.color ="red";
}

注意点: 

1.在js中获取class属性 ---> className

2.js中如果调用元素属性不存在 得到的是undefined

         如果获取元素查找不到 得到的是null

(五)open打开窗口;close关闭窗口

<body>
  <input type="button" value="打开新窗口" onclick="myOpen()" />
  <input type="button" value="关闭窗口" onclick="myClose()" />
</body>
<script>
  let newWin;
  function myOpen() {
    newWin = open("https://www.baidu.com");
  }
  function myClose() {
    newWin.close();
  }
</script>

(六)定时函数

定时函数:函数的执行器

 页面中 定时可以开启多个
 定时反复执行
        setInterval(执行的函数,间隔的毫秒数)
        clearInterval(taskId) taskId任务编号

 延时执行
        setTimeout(执行的函数,间隔的毫秒数)
        clearTimeout(taskId) taskId任务编号

传入函数三种写法:

1. setInterval("myTest()",1000)    "myTest()" 有引号和括号
2. setInterval(myTest,1000)         myTest     直接函数名 不能加括号 否则会立即执行
3. setInterval(function(){          传入匿名函数 通过匿名函数指定要执行的代码
       console.log(22222);
    },1000)

代码示例: 

//开启定时函数
let taskId = setInterval(function(){
     console.log(22222);
 },1000)
// 通过任务编号 停止定时
function stopInterval(){
     clearInterval(taskId)
}

实现按钮点击开始定时任务与结束定时: 

<body>
  <input
    id="start"
    type="button"
    value="开启定时"
    onclick="startInterval(this)"
  />
  <input
    id="stop"
    type="button"
    value="结束定时"
    onclick="stopInterval(this)"
  />
</body>
<script>
  let taskId;
  function startInterval(myObj) {
    myObj.disabled = true;
    taskId = setInterval(function () {
      console.log(222);
    }, 1000);
  }
  function stopInterval(myObj) {
    document.getElementById("start").disabled = false;
    clearInterval(taskId);
  }
</script>

 

倒计时跳转练习 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .numSpan {
        color: chocolate;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <span id="numSpan" class="numSpan">3</span>秒后页面跳转<span id="docSpan"
      >.</span
    >
  </body>
  <script>
    // 延时跳转到百度
    setTimeout(function () {
      location.href = "https://www.baidu.com";
    }, 3000);

    // 定时变换文字内容
    setInterval(function () {
      document.getElementById("numSpan").innerHTML--;
    }, 1000);

    // 定时变换.的数量
    setInterval(function () {
      document.getElementById("docSpan").innerHTML += ".";
      if (document.getElementById("docSpan").innerHTML.length == 6) {
        document.getElementById("docSpan").innerHTML = ".";
      }
    }, 200);
  </script>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程

若事与愿违&#xff0c;请相信&#xff0c;上天自有安排&#xff0c;允许一切如其所是 —— 24.11.12 一、进程、线程 现代操作系统比如Mac OS X&#xff0c;UNIX&#xff0c;Linux&#xff0c;Windows等&#xff0c;都是支持“多任务”的操作系统。 进程 进程&#xff1a;就…

OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据 ECC 标准 78找到两幅图像之间的几何变换&#xff08;warp&#xff09;。 该函数根据 ECC 标准 ([78]) 估计最优变换&#xff08;warpMatri…

彻底解决单片机BootLoader升级程序失败问题

文章目录 1、引言2、MicroBoot&#xff1a;优雅的解决升级问题问题1&#xff1a;bootloader 在跳转到app前没有清理干净存在的痕迹问题2&#xff1a; 需要 APP 传递信息给 Bootloader问题3&#xff1a; APP单独运行没有问题&#xff0c;通过Bootloader跳转到APP运行莫名死机问题…

v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条

效果 导入组件 import ElImageViewer from "element-ui/packages/image/src/image-viewer"; components:{ ElImageViewer },模板使用组件 <el-image-viewerv-if"isShowPics":on-close"closeViewer":url-list"srcList"/>定义两…

山寨一个Catch2的SECTION

Catch2 是一个 C 单元测试库&#xff0c;吹嘘自己比 NUnit 和 xUnit 还要高明&#xff0c; 支持在 TEST_CASE() 中的多个 SECTION&#xff0c; 意思是说 SECTION 外头的代码相当于setup 和 teardown&#xff0c;section 内部则被认为是实际的 test case&#xff0c; 这种写法可…

深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅

​​​​​​​ &#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承基类成员访问⽅式的变化 继承类模板 基类和派⽣类间的转换 继承中的作⽤域 隐藏规则 成员函数的隐藏 考察继承【作⽤…

36.Redis核心设计原理

本文针对前面的讲解做一次总结 1.Redis基本特性 1.非关系型的键值对数据库&#xff0c;可以根据键以O(1)的时间复杂度取出或插入关联值 2.Redis的数据是存在内存中的 3.键值对中键的类型可以是字符串&#xff0c;整型&#xff0c;浮点型等&#xff0c;且键是唯一的 4.键值对中…

项目模块十七:HttpServer模块

一、项目模块设计思路 目的&#xff1a;实现HTTP服务器搭建 思想&#xff1a;设计请求路由表&#xff0c;记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表&#xff0c;服务器只接受请求并调用用户的处理函数即可。 处理流程&#xff1a; …

vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)

1. 问题现象 环境&#xff1a; 系统&#xff1a;win11node&#xff1a;v16.20.2“vue”: “2.6.10” 执行npm run serve启动vue项目&#xff0c;期望&#xff1a; App running at:- Local: http://localhost:9528/ - Network: http://x.x.x.x:9528/实际&#xff1a; App runn…

喜报|超维机器人荣获昇腾AI创新大赛铜奖

近日&#xff0c;在备受瞩目的昇腾AI创新大赛中&#xff0c;超维机器人凭借扎实的技术实力和创新产品&#xff0c;荣获大赛铜奖。这一荣誉不仅展现了超维机器人在智能巡检领域的技术创新与突破&#xff0c;也标志着超维机器人的智能巡检解决方案在人工智能领域获得了广泛认可&a…

编程初学者的第一个 Rust 系统

编程初学者的第一个 Rust 系统 对编程初学者而言&#xff0c;存在一个 “第一个系统” 的问题&#xff0c;如果没有学会第一个系统&#xff0c;编程初学者是学不会编程的。原因是&#xff0c;现实生活里的应用程序都是有一定体量的&#xff0c;不是几十行&#xff0c;几百行的…

单元测试、集成测试、系统测试有什么区别

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 单元测试、集成测试、系统测试有什么区别 1、粒度不同 集成测试bai粒度居中&#xff0c;单元测试粒度最小&#xff0c;系统du测试粒度最大。 2、测试方式不同…

Java面试要点16 - 面向对象基础:类与对象

本文目录 一、引言二、类的定义与对象创建三、成员变量与封装四、构造方法五、this关键字六、静态成员七、总结 一、引言 面向对象编程是Java的核心特性之一&#xff0c;它通过类和对象的概念来组织和管理代码&#xff0c;使代码更加模块化、可复用和易于维护。本文将深入探讨…

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载

软件介绍 下载iOS旧版应用&#xff0c;简化繁琐的抓包流程。 一键生成去更新IPA&#xff08;手机安装后&#xff0c;去除App Store的更新检测&#xff09;。 软件界面 支持系统 Windows 10/Windows 8/Windows 7&#xff08;由于使用了Fiddler库&#xff0c;因此需要.Net环境…

LeetCode 热题100 之 多维动态规划

1.不同路径 思路分析&#xff1a;动规五部曲 dp数组定义&#xff1a;dp[i][j]表示从起点&#xff08;0&#xff0c;0&#xff09;到位置(i,j)的路径数量递推公式&#xff1a;dp[i][j] dp[i-1][j] dp[i][j-1] 从 (i-1, j) 位置到 (i, j) 需要走一步向下的路径。从 (i, j-1) 位…

文件操作(3)

前言&#xff0c;在上篇博客介绍了如何正确的打开一个文件和关闭一个文件&#xff0c;今天我们来学习如何在文件中输出和输入数据。 对文件数据的读写可以分为顺序读写和随机读写。顺序读写&#xff0c;即挨着顺序对文件中的数据进行输入或输出。 在这片博客中&#xff0c;我们…

Openstack7--安装消息队列服务RabbitMQ

只需要在控制节点安装 安装RabbitMQ yum -y install rabbitmq-server 启动RabbitMQ并设置开机自启 systemctl start rabbitmq-server;systemctl enable rabbitmq-server 创建 rabbitmq 用户 并设置密码为 000000 rabbitmqctl add_user rabbitmq 000000 如果你不慎创错了…

Unity图形学之Shader2.0 模板测试

1.模版测试&#xff1a;符合条件的 通过 不符合条件的 像素 丢弃 比较公式&#xff1a; if&#xff08;&#xff08;referenceValue&readMask&#xff09; comparisonFunction &#xff08;stencilBufferValue&readMask&#xff09;&#xff09; 通过像素 else 抛弃…

020_Servlet_Mysql学生选课系统(新版)_lwplus87

摘 要 随着在校大学生人数的不断增加&#xff0c;教务系统的数据量也不断的上涨。针对学生选课这一环节&#xff0c;本系统从学生网上自主选课以及课程发布两个大方面进行了设计&#xff0c;基本实现了学生的在线信息查询、选课功能以及教师对课程信息发布的管理等功能&…

SpringBoot教程(二十五) | SpringBoot配置多个数据源

SpringBoot教程&#xff08;二十五&#xff09; | SpringBoot配置多个数据源 前言方式一&#xff1a;使用dynamic-datasource-spring-boot-starter引入maven依赖配置数据源动态切换数据源实战 方式二&#xff1a;使用AbstractRoutingDataSource1. 创建数据源枚举类2. 创建数据源…