ES6笔记

ES6

ECMAScript

ECMA组织:脚本语言标准化国际组织

1.什么是ES6

ES的全称是:ECMAScript,它是ECMA国际标准化组织制定的一项脚本语言的标准规范

2015年6月:ES2015

2016年6月:ES2016

2017年6月:ES2017

2018年6月:ES2018

2.为什么要学习ES6

每一次标准的诞生都意味着语言的完善,功能的加强。javaScript语言本身也有一些不令人满意的地方。

  • 变量提升特性增加了程序运行时的不可预测性。
  • 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码

3.ES6 新增的语法

3.1 let

es6中新增的用于声明变量的关键字.

let声明的变量只在所处的块级有效
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>11let</title>
</head>
<body><script>//ES6中:如果一个变量用let声明,那么它只在所处的块级中有效if(true){let a = 10;}function fn(){}for(let i = 0; i <= 10; i++){}console.log(i);console.log(a);</script>
</body>
</html>

**注意:**使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性

不存在变量提升
//不存在变量提升
console.log(a);
let a = 20;
暂时性死区

利用let声明变量会绑定这个块级作用域,不会受到外界的影响

var temp = 123;
if(true){let temp;temp = 'abc';
}
经典面试题
var arr = [];
for(var i = 0; i < 2; i++){arr[i] = function(){console.log(i);}
}arr[0]();
arr[1]();

在这里插入图片描述

关键是变量i是全局的,函数执行时候输出是全局作用域下的i的值

let arr = [];
for(let i = 0; i < 2; i++){arr[i] = function(){console.log(i);}
}arr[0]();
arr[1]();

!在这里插入图片描述

关键点就在于每次循环都会产生一个块级作用域,每个块级作用于下的变量都是不同的,函数执行时输出的都是自己上一级(循环产生的块级作用域)下的i的值

小结

  • let关键字就是用来声明变量的
  • 使用let关键字声明的变量具有块级作用域
  • 在一个大括号中使用let关键字声明的变量才具有块级作用域,var关键字声明的变量不具备块级作用域
  • 防止循环变量变成全局变量,可以使用let声明变量
  • 使用let官架子声明的变量没有变量提升
  • 使用let关键字声明的变量具有暂时死区特性

3.2 const

声明常量,常量就是(内存地址)不能变化的量

具有块级作用域
if(true){const a = 10;   
}
console.log(a); //a is not defined
声明的时候必须赋值
const PI;  //Missing initializer in const declaration
常量赋值后,值不能被修改
const PI = 3.14;
PI = 100; //Assignment to constant variable
小结
  • const声明的变量是一个常量(值不能被修改)
  • 既然是常量就不能重新再赋值,如果是基本数据类型,不能更改值。如果是复杂数据类型,不能更改地址值。
  • 声明const的时候必须要给定值

3.3 let、const和var的区别

varletconst
函数级作用域块级作用域块级作用域
变量提升不存在变量提升不存在变量提升
值可以修改值可以修改值不可更改

4.解构赋值

ES6中允许从数组中提取值,按照对一个位置,对变量赋值,对象也可以实现解构

4.1 数组解构

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>14数组解构</title>
</head>
<body><script>let [a,b,c,d] = [1,2,3];console.log(a);console.log(b);console.log(c);console.log(d); //undefined  //如果解构不成功,变量的值就是undefined</script>
</body>
</html>

4.2 对象解构

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>15.对象解构</title>
</head>
<body><script>let person = {name:'张三',age:20,gender:'男'}//对象解构 - 这种写法要求解构出来的变量名必须和属性名一致let {name,age,gender} = person;console.log(name);console.log(age);console.log(gender);//对象解构 - 可以解构出来的变量名和属性名不一样 (myname,myage,sex都属于别名)let {name:myname,age:myage,gender:sex} = personconsole.log(myname);console.log(myage);console.log(sex);</script>
</body>
</html>

小结

  • 解构赋值就是把数据结构分解,然后给变量进行赋值
  • 如果解构不成功,变量跟数值个数不匹配的时候,变量的值为undefined
  • 数组解构用中括号包裹,对象解构用花括号包裹,多个变量之间用逗号分隔
  • 利用解构赋值能够让我们方便的去取对昂中的属性和方法

5.箭头函数(⭐⭐⭐⭐⭐)

5.1 ES6中新增的定义函数的方式

() => {}  //() 代表是函数    => 必须要的符号,指向哪一个代码块    {}表示函数体
const fn = () => {}  //代表把一个函数赋值给了fn

5.2 大括号可省略

函数体内只有一行代码,且代码的执行结果就是返回值,可以省略大括号

//1.在箭头函数中,如果函数体内只有一句代码,
//     并且代码的执行结果就是函数的返回值,函数体大括号可以省略
// const sum = (x,y) => {
//     return x + y;
// }
const sum = (x,y) =>  x + y;

5.2 形参括号可省略

如果形参只有一个,可以省略小括号

//2.在箭头函数中,如果形参只有一个,形参外侧的小括号也是可以省略不写
// const fn = (v) =>{
//     console.log(v);
// }
const fn = v =>{console.log(v);
}
fn('我爱中国');

5.3 箭头函数中没有this

箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置上下文的this

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>02箭头函数中的this</title>
</head>
<body><button>按钮1</button><div>哈哈</div><script>var btn = document.querySelector('button');var div = document.querySelector('div');btn.onclick = function(){console.log(this);// div.addEventListener('click',function(){//     console.log(this); //这个时候是div// });//箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置上下文的thisdiv.addEventListener('click',() => {console.log(this); //这个时候是btn});}</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>01.箭头函数</title>
</head>
<body><script>//箭头函数:用来简化函数定义语法的// const fn = () => {// }// fn();//1.在箭头函数中,如果函数体内只有一句代码,//     并且代码的执行结果就是函数的返回值,函数体大括号可以省略// const sum = (x,y) => {//     return x + y;// }const sum = (x,y) =>  x + y;const result = sum(10,20);console.log(result);//2.在箭头函数中,如果形参只有一个,形参外侧的小括号也是可以省略不写// const fn = (v) =>{//     console.log(v);// }const fn = v =>{console.log(v);}fn('我爱中国');//3. 箭头函数不绑定this。箭头函数没有自己的this关键字,如果在箭头哈桑怒中使用this关键字,//   this关键字将指向箭头函数定义位置中的thisfunction fn2(){console.log(this);  //window// return function(){//     console.log('返回的:' + this);// }return () => {console.log(this);}}const obj = {name:'张三'}var resFn = fn2().call(obj);resFn();</script>
</body>
</html>

5.4 小结

  • 箭头函数不绑定this,箭头函数中的this指向的是它所定义的位置,可以简单的理解为,定义箭头哈桑农户中的作用域的this指向谁,他就指向谁
  • 箭头函数的有点在于解决了this执行环境中所造成的一些问题。比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval使用this造成的问题。

5.5 面试题

var age = 100;
var obj = {age: 20,say: ()=>{alert(this.age);}
}obj.say(); //100

箭头函数this指向是被声明的作用域里面,而对象没有作用域,所以箭头函数虽然在对象中被定义,但是this指向的是全局作用域。

6.剩余参数(⭐⭐⭐)

剩余参数语法允许我们将一个不定数量的参数表示为一个数组,不定参数定义方式,这种方式很方便的去声明不知道参数的情况下的一个函数。

6.1 语法
function 函数名 (first,...args){}
6.2 剩余参数和解构
let students = ['zs','ls','ww'];
let [s1,...s2] = students;console.log(s1); //sz
console.log(s2); //['ls','ww']
6.2 案例
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>04剩余参数</title>
</head>
<body><script>const sum = (...args) => {let total = 0;//args.forEach(function(value){});args.forEach(value => {total += value;});return total;}console.log(sum(10,20));console.log(sum(10,20,30));console.log(sum(10,20,30,40,50,60));let arr1 = ['张三','李四','王五','赵六'];let [s1,...s2] = arr1;console.log(s1);console.log(s2);</script>
</body>
</html>

7.ES6的内置对象扩展

7.1 Array的扩展方法

扩展运算符(展开语法)

扩展运算符可以将数组或对象转换为用逗号分隔的参数序列

let arr = [1,2,3]
...arr
console.log(...arr); //等同于下面的写法
console.log(1,2,3);
扩展运算符可以应用于合并数组
//方法一
let arr1 = [1,2,3]
let arr2 = [3,4,5]
let arr1 = [...arr1,...arr2]//方法二
arr1.push(..arr2);
将类数组或可遍历对象转换成为真正的数组
let oDivs = document.getElementByTagName('div');
oDivs = [...oDivs]
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>05数组扩展运算符</title>
</head>
<body><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><script>//1.扩展运算符可以将数组拆分成以逗号分隔的参数序列let arr = ['a','b','c'];// ...arr;  'a','b','c'console.log(...arr); //等同于下面的写法console.log('a','b','c');//2.扩展运算符应用于数组的合并let arr1 = [1,2,3];let arr2 = [3,4,5];let arr3 = [...arr1,...arr2];console.log(arr3);//第二种合并的方式arr1.push(...arr2);console.log(arr1);//3.利用扩展运算符将伪数组转换成真正的数组var oDivs = document.getElementsByTagName('div');console.log(oDivs);//转换成一个真数组var arr4 = [...oDivs]arr4.push('a');console.log(arr4);</script>
</body>
</html>
7.1.2 构造方法

Array.from()

将伪数组或可遍历对象转换成为真正的数组

//定义一个集合
let arrLike = {'0':'a','1':'b','2':'c',length: 3
}//转成一个真数组
let arr2 = Array.from(arrLike); //['a','b','c']

方法还可以接受第二个参数,作用类似于数组的map方法,用原来对每个元素进行处理,将处理的值放入到返回的数组

//定义一个集合
let arrLike = {'0':1,'1':2,'2':3,length: 3
}//转成一个真数组
let arr2 = Array.from(arrLike,item => item*2); //[2,4,6]
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>06Array.from方法</title>
</head>
<body><script>// var arrayLike = {//     '0':'a',//     '1':'b',//     '2':'c',//     length: 3// }// //将伪数组或可遍历对象转换成为真正的数组// var arr = Array.from(arrayLike);// console.log(arr); //['a', 'b', 'c']var arrLike = {'0':1,'1':2,'2':3,'length':3}//var arr = Array.from(arrLike,(item) => {return item*2});var arr = Array.from(arrLike,item => item*2);console.log(arr);</script>
</body>
</html>
7.1.3 实例方法find

用于找出第一个符合条件的数组成员,如果没有找到就返回undefined

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>实例方法find</title>
</head>
<body><script>let arr = [{id:1,name:'张三'},{id:2,name:'李四'}];//找数组里面符合条件的值,当数组中元素id等于2就查找出来//只会匹配一个//let target = arr.find((item,index) => { return item.id = 2;});let target = arr.find((item,index) => item.id = 2);console.log(target);</script>
</body>
</html>
7.1.4 实例方法findIndex

用于找出第一个符合条件的数组成员的位置,如果没有找到返回-1

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>实例方法findIndex</title>
</head>
<body><script>// var arr = [//     {//         id:1,//         name:'张三'//     },//     {//         id:2,//         name:'李四'//     }// ]let arr = [10,20,30,50]let index = arr.findIndex((item) => {return item > 20;});//let index = arr.findIndex(item => item > 20);console.log(index);</script>
</body>
</html>
7.1.4 实例方法Includes

判断某个数组是否包含给定的值,返回布尔值

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>实例方法Includes</title>
</head>
<body><script>let arr = ['a','b','c','e'];let result = arr.includes('a'); console.log(result); //trueresult = arr.includes('d');console.log(result);//false</script>
</body>
</html>

7.2 String的扩展方法

7.2.1 字符串模板

ES6 新增的创建字符串的方式,使用反引号定义

let name = `张三`
模板字符串中可以解析变量
let name = '张三';
let sayHello = `hello,my name is ${name}`;
模板字符串可以换行
let result = {name:'张三',age:20,sex:'男'
}
let html = `<div><span>${result.name>}</span><span>${result.age>}</span><span>${result.sex>}</span>
</div>`
在模板字符串中可以调用函数
const sayHello = function(){return '厉害了我的国';
}let grant = `${sayHello()}哈哈哈`console.log(grant); //厉害了我的国哈哈哈
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>10.字符串模板</title>
</head>
<body><script>let name = '张三';let sayHello = `hello,my name is ${name}`;console.log(sayHello);let result = {name:'张三',age:20}let html = `<div><span>姓名:${result.name}</span><span>年龄:${result.age}</span></div>`;console.log(html);const fn = () => {return '厉害了我的国';}let html2 = `${fn()}哈哈哈`console.log(html2);</script>
</body>
</html>
7.2.2 startWith() 和 endWith()
  • startWith() 表示参数字符串是否在原字符串的头部,返回布尔值
  • endWith() 表示值参数字符串是否在原字符串的尾部,返回布尔值
let str = 'Hello World';
str.startWith('Hello'); //true
str.endWith('World'); //true
str.endWith('d'); //true
str.endWith('x'); //false
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>11startWith()endWith()</title>
</head>
<body><script>let str = 'Hello ECMAScript 2024';let r1 = str.startsWith('Hello');   //区分大小写console.log(r1);let r2 = str.endsWith('4');console.log(r2)</script>
</body>
</html>
7.2.2 repeat()

字符串重复多少次

语法:字符串.repeat(次数);

console.log('*'.repeat(10));

8.Set数据结构

ES6中提供了一个新的数据解构set,它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成Set数据结构

8.1 创建语法

const s = new Set();

set函数可以接受一个数组作为参数,用来初始化

const set = new Set([1,2,3,4,4,5]);  //{1,2,3,4}

8.2 实例方法

  • add(value):添加某个值到set,返回set结构本身
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功
  • has(value):返回一个布尔值,表示该值是否为Set的成员
  • clear() :清除所有的成员,没有返回值
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>13.set</title>
</head>
<body><script>//1.创建一个空的set对象const s1 = new Set();console.log(s1);console.log(s1.size); //set的长度const s2 = new Set(['a','b','c']);console.log(s2);console.log(s2.size);//set中不能有重复的元素const s3 = new Set(['a','b','c','a']);console.log(s3);console.log(s3.size);const set = new Set();//往set中添加元素set.add('a');set.add('b').add('c').add('d').add('c');//set中删除元素const d1 = set.delete('d'); //删除成功返回trueconst d2 = set.delete('d'); //删除失败返回falseconsole.log(d1);console.log(d2);//判断一个值是否是set数据结构中的成员,使用has,有就返回true,没有就返回falseconst r1 = set.has('d')console.log(r1);//清空set数据结构中的值,clear方法set.clear();console.log(set);</script>
</body>
</html>

8.3 遍历

Set结构的实例和数据一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值

set.forEach(value => console.log(value));
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>14set结构的遍历</title>
</head>
<body><script>const set = new Set(['a','b','c','d']);//遍历set.forEach(value =>{console.log(value);});</script>
</body>
</html>

删除元素
const d1 = set.delete(‘d’); //删除成功返回true
const d2 = set.delete(‘d’); //删除失败返回false
console.log(d1);
console.log(d2);
//判断一个值是否是set数据结构中的成员,使用has,有就返回true,没有就返回false
const r1 = set.has(‘d’)
console.log(r1);

    //清空set数据结构中的值,clear方法set.clear();console.log(set);
</script>
````

8.3 遍历

Set结构的实例和数据一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值

set.forEach(value => console.log(value));
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>14set结构的遍历</title>
</head>
<body><script>const set = new Set(['a','b','c','d']);//遍历set.forEach(value =>{console.log(value);});</script>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用命令之LinuxOracleHivePython

1. 用户改密 passwd app_adm chage -l app_adm passwd -x 90 app_adm -> 执行操作后&#xff0c;app_adm用户的密码时间改为90天有效期--查看该euser用户过期信息使用chage命令 --chage的参数包括 ---m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 ---M 密码…

游戏如何应对内存修改

据观察&#xff0c;近年来游戏黑灰产攻击角度多样化趋势显著&#xff0c;主要面临工作室、定制注入挂、模拟点击挂、内存修改挂、破解版等多方面安全问题。 据FairGuard数据统计&#xff0c;在游戏面临的众多安全风险中&#xff0c;「内存修改」攻击占比约为13%&#xff0c;主…

STM32单片机设计防儿童人员误锁/滞留车内警报系统

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 近年来在车辆逐渐普及的情况下&#xff0c;由于家长的疏忽&#xff0c;将…

华为欧拉系统使用U盘制作引导安装华为欧拉操作系统

今天记录一下通过U盘来安装华为欧拉操作系统 华为欧拉操作系统是国产的一个类似于Centos的Linus系统 具体实现操作步骤&#xff1a; 先在官网下载欧拉系统镜像点击跳转到下载 准备好一个大于16g的U盘 &#xff0c;用于制作U盘启动 下载一个引导程序制作工具&#xff0c;我使用…

Excel单元格中自适应填充多图

实例需求&#xff1a;在Excel插入图片时&#xff0c;由于图片尺寸各不相同&#xff0c;如果希望多个图片填充指定单元格&#xff0c;依靠用户手工调整&#xff0c;不仅费时费力&#xff0c;而且很难实现完全填充。如下图中的产品图册&#xff0c;有三个图片&#xff0c;如下图所…

51单片机应用开发---LCD1602显示应用

实现目标 1、了解LCD1602液晶屏&#xff1b; 2、掌握驱动程序的编写&#xff1b; 3. 具体目标&#xff1a;在屏幕上显示字符。 一、LCD1206概述 1.1 定义 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置…

问题分析与解决:Android开机卡动画问题分析

1. 问题背景及描述 在一个android设备的开发的项目中遇到了一个比较典型的问题:在主板贴片完成后,首次刷入androdi固件验证时,遇到了按键出发开机后,系统启动到android动画界阶段时一直循环卡在此阶段,无法进入桌面。如下如所示: 此问题在许多android项目的首次点亮阶段均…

nfs服务器--RHCE

一&#xff0c;简介 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计 算机&#xff08;不同的计算机、不同的操作系统&#xff09;之间通过TCP/IP网络共享资源&#xff0c;主要在unix系…

黑马智慧商城项目学习笔记

目录 智慧商城项目创建项目调整初始化目录vant组件库vant按需导入和全部导入 项目中的vw适配路由设计配置登录页静态布局图形验证码功能request模块-axios封装api模块-封装图片验证码接口 Toast轻提示&#xff08;vant组件&#xff09;短信验证倒计时功能登录功能响应拦截器统一…

MySQL中将一个字符串字段按层级树状展开

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 需求1.分析2.实现3.思路刨析表结构和数据 需求 数据库中有个字段如下 如何将其转换为如下形式&#xff1a; 1.分析 1.他的层级个数是不确定的&#xff0c;也就是说有的有2层有的有5…

IDEA优雅debug

目录 引言一、断点分类&#x1f384;1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧&#x1f389;3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言 使用ID…

springboot基于Web足球青训俱乐部管理后台系统开发(代码+数据库+LW)

摘 要 随着社会经济的快速发展&#xff0c;人们对足球俱乐部的需求日益增加&#xff0c;加快了足球健身俱乐部的发展&#xff0c;足球俱乐部管理工作日益繁忙&#xff0c;传统的管理方式已经无法满足足球俱乐部管理需求&#xff0c;因此&#xff0c;为了提高足球俱乐部管理效率…

STM32保护内部FLASH

在实际发布的产品中&#xff0c;在STM32芯片的内部FLASH存储了控制程序&#xff0c;如果不作任何保护措施的话&#xff0c;可以使用下载器直接把内部FLASH的内容读取回来&#xff0c;得到bin或hex文件格式的代码拷贝&#xff0c;别有用心的厂商即可利用该代码文件山寨产品。为此…

树的直径计算:算法详解与实现

树的直径计算:算法详解与实现 1. 引言2. 算法概述3. 伪代码实现4. C语言实现5. 算法分析6. 结论在图论中,树的直径是一个关键概念,它表示树中任意两点间最长路径的长度。对于给定的树T=(V,E),其中V是顶点集,E是边集,树的直径定义为所有顶点对(u,v)之间最短路径的最大值。…

无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;无人机场景车辆检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如无人机场景城市道路行驶车辆图片、无人机场景城市道边停车车辆图片、无人机场景停车场车辆图片、无人机场景小区车辆图片、无人机场景车辆遮挡、车…

爬虫——Requests库的使用

在爬虫开发中&#xff0c;HTTP请求是与服务器进行交互的关键操作。通过发送HTTP请求&#xff0c;爬虫可以获取目标网页或接口的数据&#xff0c;而有效地处理请求和响应是爬虫能够高效且稳定运行的基础。Requests库作为Python中最常用的HTTP请求库&#xff0c;因其简洁、易用和…

基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型

本系统是基于Python Django框架构建的“Boss直聘”数据采集与分析预测系统&#xff0c;旨在通过技能匹配的方式对招聘信息进行分析与预测&#xff0c;帮助求职者根据自身技能找到最合适的职位&#xff0c;同时为招聘方提供更精准的候选人推荐。系统的核心预测模型基于职位需求技…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

杰控通过 OPCproxy 获取数据发送到服务器

把数据从 杰控 取出来发到服务器 前提你在杰控中已经有变量了&#xff08;wincc 也适用&#xff09; 打开你的opcproxy 软件包 opcvarFile 添加变量 写文件就写到 了 opcproxy.ini中 这个文件里就是会读取到的数据 然后 opcproxy.exe发送到桌面快捷方式再考回来 &#…

Ubuntu 的 ROS 操作系统 turtlebot3 导航仿真

引言 导航仿真是机器人自动化系统中不可或缺的一部分&#xff0c;能够帮助开发者在虚拟环境中测试机器人在复杂场景下的运动与路径规划。 在 Gazebo 仿真环境中&#xff0c;TurtleBot3 配合 ROS 操作系统提供了强大的导航功能。在进行导航仿真时&#xff0c;首先需要准备地图&…