JS进阶-解析赋值
学习目标:
- 掌握解析赋值
学习内容:
- 解构赋值
- 数组解构
- 对象解构
- 筛选数组filter方法(重点)
解构赋值:
解构赋值是一种快速为变量赋值的简洁语法,本质上仍然是为变量赋值。
分为:
- 数组解构
- 对象解构
数组解构:
数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法。
基本语法:
- 赋值运算符 = 左侧的
[ ]
用于批量声明变量,右侧数组的单元值将被赋值给左侧的变量。 - 变量的顺序对应数组单元值的位置依次进行赋值操作。
<title>数组解构</title>
</head><body><script>// const arr = [100, 60, 80]// 数组解构 赋值// // const [max, min, avg] = arrconst [max, min, avg] = [100, 60, 80]// // const max = arr[0]// // const min = arr[1]// // const avg = arr[2]console.log(max) // 100console.log(avg) // 80// 交换2个变量的值let a = 1let b = 2; //这里必须有分号[b, a] = [a, b]console.log(a, b)</script></body>
注意:js前面必须加分号的情况:
<title>必须加分号的两种情况</title>
</head><body><script>// 1. 立即执行函数要加// (function () { })();// (function () { })();// 2. 使用数组的时候// const arr = [1, 2, 3]const str = 'pink';[1, 2, 3].map(function (item) {console.log(item)})let a = 1let b = 2;[b, a] = [a, b]console.log(a, b)</script>
- 小结:
- 数组解构赋值的作用是什么?
是
将数组的单元值快速批量赋值
给一系列变量的简洁语法
。
- JS前面有哪种情况需要加分号的?
立即执行函数
// 1. 立即执行函数要加(function () { })();(function () { })();
数组解构
//数组开头的,特别是前面有语句的一定要注意加分号
;[b, a] = [a, b]
- 练习:
<title>练习-独立完成数组解构赋值</title>
</head><body><script>// const pc = ['海尔', '联想', '小米', '方正'];// [hr, lx, mi, fz] = pc// console.log(hr,lx,mi,fz);// function getValue() {// return [100, 60]// }// [max,min] = getValue()// console.log(max,min);// const pc = ['海尔', '联想', '小米', '方正']const [hr, lx, mi, fz] = ['海尔', '联想', '小米', '方正']console.log(hr)console.log(lx)console.log(mi)console.log(fz)//请将最大值和最小值函数返回值解构 max 和 min 两个变量function getValue() {return [100, 60]}const [max, min] = getValue()console.log(max)console.log(min)</script></body>
- 数组解构细节:
变量多,单元值少的情况:
// 1. 变量多, 单元值少 , undefinedconst [a, b, c, d] = [1, 2, 3]console.log(a) // 1console.log(b) // 2console.log(c) // 3console.log(d) // undefined
变量的数量大于单元值数量时,多余的变量将被赋值为undefined
。
变量少,单元值多的情况:
// 2. 变量少, 单元值多const [a, b] = [1, 2, 3]console.log(a) // 1console.log(b) // 2
利用剩余参数解决变量少,单元值多的情况:
// 3. 剩余参数 变量少, 单元值多const [a, b, ...c] = [1, 2, 3, 4]console.log(a) // 1console.log(b) // 2console.log(c) // [3, 4] 真数组
剩余参数返回的还是一个数组。
防止有undefined传递单元值的情况,可以设置默认值:
// 4. 防止 undefined 传递const [a = 0, b = 0] = [1, 2]const [a = 0, b = 0] = []console.log(a) // 1console.log(b) // 2
允许初始化变量的默认值,且只有单元值为undefined
时默认值才会生效。
按需导入,忽略某些返回值:
// 5. 按需导入赋值const [a, b, , d] = [1, 2, 3, 4]console.log(a) // 1console.log(b) // 2console.log(d) // 4
支持多维数组的结构:
// const arr = [1, 2, [3, 4]]// console.log(arr[0]) // 1// console.log(arr[1]) // 2// console.log(arr[2]) // [3,4]// console.log(arr[2][0]) // 3// 多维数组解构// const arr = [1, 2, [3, 4]]// const [a, b, c] = [1, 2, [3, 4]]// console.log(a) // 1// console.log(b) // 2// console.log(c) // [3,4]const [a, b, [c, d]] = [1, 2, [3, 4]]console.log(a) // 1console.log(b) // 2console.log(c) // 3console.log(d) // 4
- 小结:
- 变量的数量大于单元值数量时,多余的变量将被赋值为?
undefined
。
- 变量的数量小于单元值数量时,可以通过什么剩余获取所有的值?
剩余参数...
获取剩余单元值,但只能置于最末位。
对象解构:
对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法。
- 基本语法:
- 赋值运算符 = 左侧的
{ }
用于批量声明变量,右侧对象的属性值将被赋值给左侧的变量。 - 对象属性的值将被赋值给与属性名
相同的
变量。 - 注意解构的变量名不要和外面的变量名冲突,否则报错。
- 对象中找不到与变量名一致的属性时,变量值为
undefined
。
<title>对象解构</title>
</head><body><script>// 对象解构// const obj = {// uname: '雪碧宝宝',// age: 18// }// obj.uname// obj.age // const uname = '丸子宝宝' //报错 注意解构的变量名不要和外面的变量名冲突否则报错// 解构的语法// const { uname, age } = { uname: '雪碧宝宝',age: 18 }// // 等价于 const uname = obj.uname// // 要求属性名和变量名必须一直才可以// console.log(uname)// console.log(age)// 1. 对象解构的变量名 可以重新改名 旧变量名: 新变量名// const { uname: username, age } = { uname: '雪碧宝宝', age: 18 }// console.log(username)// console.log(age)// 2. 解构数组对象const pig = [{uname: '佩奇',age: 6}]const [{ uname, age }] = pigconsole.log(uname)console.log(age)</script></body>
- 多级对象解构:
<title>多级对象解构</title>
</head><body><script>// const pig = {// name: '佩奇',// family: {// mother: '猪妈妈',// father: '猪爸爸',// sister: '乔治'// },// age: 6// }// // 多级对象解构// const { name, family: { mother, father, sister } } = pig// console.log(name)// console.log(mother)// console.log(father)// console.log(sister)const person = [{name: '佩奇',family: {mother: '猪妈妈',father: '猪爸爸',sister: '乔治'},age: 6}]const [{ name, family: { mother, father, sister } }] = personconsole.log(name)console.log(mother)console.log(father)console.log(sister)</script></body>
- 遍历数组的forEach方法(重点):
forEach( )
方法用于调用数组的每个元素,并将元素传递给回调函数。
主要使用场景:遍历数组的每个元素
。
语法:
被遍历的数组.forEach(function(当前数组元素,当前元素索引号){//函数体
})
<title>forEach遍历数组</title>
</head><body><script>// forEach 就是遍历 加强版的for循环 适合于遍历数组对象const arr = ['red', 'green', 'pink']const result = arr.forEach(function (item, index) {console.log(item) // 数组元素 red green pinkconsole.log(index) // 索引号})// console.log(result)</script></body>
注意:
forEach
主要是遍历数组。- 参数当前数组元素必须要写的,索引号可选。
- 练习:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>案例-渲染商品</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.list {width: 990px;margin: 0 auto;display: flex;flex-wrap: wrap;padding-top: 100px;}.item {width: 240px;margin-left: 10px;padding: 20px 30px;transition: all .5s;margin-bottom: 20px;}.item:nth-child(4n) {margin-left: 0;}.item:hover {box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.2);transform: translate3d(0, -4px, 0);cursor: pointer;}.item img {width: 100%;}.item .name {font-size: 18px;margin-bottom: 10px;color: #666;}.item .price {font-size: 22px;color: firebrick;}.item .price::before {content: "¥";font-size: 14px;}</style>
</head><body><div class="list"><!-- <div class="item"><img src="" alt=""><p class="name"></p><p class="price"></p></div> --></div><script>const goodsList = [{id: '4001172',name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',price: '289.00',picture: 'https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg',},{id: '4001594',name: '日式黑陶功夫茶组双侧把茶具礼盒装',price: '288.00',picture: 'https://yanxuan-item.nosdn.127.net/3346b7b92f9563c7a7e24c7ead883f18.jpg',},{id: '4001009',name: '竹制干泡茶盘正方形沥水茶台品茶盘',price: '109.00',picture: 'https://yanxuan-item.nosdn.127.net/2d942d6bc94f1e230763e1a5a3b379e1.png',},{id: '4001874',name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',price: '488.00',picture: 'https://yanxuan-item.nosdn.127.net/44e51622800e4fceb6bee8e616da85fd.png',},{id: '4001649',name: '大师监制龙泉青瓷茶叶罐',price: '139.00',picture: 'https://yanxuan-item.nosdn.127.net/4356c9fc150753775fe56b465314f1eb.png',},{id: '3997185',name: '与众不同的口感汝瓷白酒杯套组1壶4杯',price: '108.00',picture: 'https://yanxuan-item.nosdn.127.net/8e21c794dfd3a4e8573273ddae50bce2.jpg',},{id: '3997403',name: '手工吹制更厚实白酒杯壶套装6壶6杯',price: '99.00',picture: 'https://yanxuan-item.nosdn.127.net/af2371a65f60bce152a61fc22745ff3f.jpg',},{id: '3998274',name: '德国百年工艺高端水晶玻璃红酒杯2支装',price: '139.00',picture: 'https://yanxuan-item.nosdn.127.net/8896b897b3ec6639bbd1134d66b9715c.jpg',},]//1.声明一个字符串变量let str = ''//2.遍历数组goodsList.forEach(item => {// console.log(item) //可以得到每一个数组元素 对象{id:'4001172'}// const {id} = item 对象解构const { name, price, picture } = itemstr += `<div class="item"><img src=${picture}alt=""><p class="name">${name}</p><p class="price">${price}</p></div>`})//3.生成的 字符串 添加给listdocument.querySelector('.list').innerHTML = str</script></body></html>
筛选数组filter方法(重点):
filter( )
方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
主要使用场景:筛选数组符合条件的元素
,并返回筛选之后元素的新数组。
返回值:返回数组,包含了符合条件的所有元素。如果没有符合条件的元素则返回空数组。
参数:currentValue
必须写,index
可选。
因为返回新数组,所以不会影响原数组。
语法:
被遍历的数组.filter(function(currentValue,index){return 筛选条件
})
<title>筛选数组filter方法</title>
</head><body><script>const arr = [10, 20, 30]// const newArr = arr.filter(function (item, index) {// // console.log(item)// // console.log(index)// return item >= 20// })// 返回的符合条件的新数组const newArr = arr.filter(item => item >= 20)console.log(newArr)</script></body>
- 练习:
<!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>综合案例-价格筛选</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.list {width: 990px;margin: 0 auto;display: flex;flex-wrap: wrap;}.item {width: 240px;margin-left: 10px;padding: 20px 30px;transition: all .5s;margin-bottom: 20px;}.item:nth-child(4n) {margin-left: 0;}.item:hover {box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.2);transform: translate3d(0, -4px, 0);cursor: pointer;}.item img {width: 100%;}.item .name {font-size: 18px;margin-bottom: 10px;color: #666;}.item .price {font-size: 22px;color: firebrick;}.item .price::before {content: "¥";font-size: 14px;}.filter {display: flex;width: 990px;margin: 0 auto;padding: 50px 30px;}.filter a {padding: 10px 20px;background: #f5f5f5;color: #666;text-decoration: none;margin-right: 20px;}.filter a:active,.filter a:focus {background: #05943c;color: #fff;}</style>
</head><body><div class="filter"><a data-index="1" href="javascript:;">0-100元</a><a data-index="2" href="javascript:;">100-300元</a><a data-index="3" href="javascript:;">300元以上</a><a href="javascript:;">全部区间</a></div><div class="list"><!-- <div class="item"><img src="" alt=""><p class="name"></p><p class="price"></p></div> --></div><script>// 2. 初始化数据const goodsList = [{id: '4001172',name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',price: '289.00',picture: 'https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg',},{id: '4001594',name: '日式黑陶功夫茶组双侧把茶具礼盒装',price: '288.00',picture: 'https://yanxuan-item.nosdn.127.net/3346b7b92f9563c7a7e24c7ead883f18.jpg',},{id: '4001009',name: '竹制干泡茶盘正方形沥水茶台品茶盘',price: '109.00',picture: 'https://yanxuan-item.nosdn.127.net/2d942d6bc94f1e230763e1a5a3b379e1.png',},{id: '4001874',name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',price: '488.00',picture: 'https://yanxuan-item.nosdn.127.net/44e51622800e4fceb6bee8e616da85fd.png',},{id: '4001649',name: '大师监制龙泉青瓷茶叶罐',price: '139.00',picture: 'https://yanxuan-item.nosdn.127.net/4356c9fc150753775fe56b465314f1eb.png',},{id: '3997185',name: '与众不同的口感汝瓷白酒杯套组1壶4杯',price: '108.00',picture: 'https://yanxuan-item.nosdn.127.net/8e21c794dfd3a4e8573273ddae50bce2.jpg',},{id: '3997403',name: '手工吹制更厚实白酒杯壶套装6壶6杯',price: '100.00',picture: 'https://yanxuan-item.nosdn.127.net/af2371a65f60bce152a61fc22745ff3f.jpg',},{id: '3998274',name: '德国百年工艺高端水晶玻璃红酒杯2支装',price: '139.00',picture: 'https://yanxuan-item.nosdn.127.net/8896b897b3ec6639bbd1134d66b9715c.jpg',},]// 1. 渲染函数 封装function render(arr) {// 声明空字符串let str = ''// 遍历数组 arr.forEach(item => {// 解构const { name, picture, price } = itemstr += `<div class="item"><img src=${picture} alt=""><p class="name">${name}</p><p class="price">${price}</p></div> `})// 追加给list document.querySelector('.list').innerHTML = str}render(goodsList) // 页面一打开就需要渲染// 2. 过滤筛选 document.querySelector('.filter').addEventListener('click', e => {// e.target.dataset.index e.target.tagNameconst { tagName, dataset } = e.target// 判断 if (tagName === 'A') {// console.log(11) // arr 返回的新数组let arr = goodsListif (dataset.index === '1') {arr = goodsList.filter(item => item.price > 0 && item.price <= 100)} else if (dataset.index === '2') {arr = goodsList.filter(item => item.price >= 100 && item.price <= 300)} else if (dataset.index === '3') {arr = goodsList.filter(item => item.price >= 300)}// 渲染函数render(arr)}})</script>
</body></html>
相关文章:
JS进阶-解析赋值
学习目标: 掌握解析赋值 学习内容: 解构赋值数组解构对象解构筛选数组filter方法(重点) 解构赋值: 解构赋值是一种快速为变量赋值的简洁语法,本质上仍然是为变量赋值。 分为: 数组解构对象解…...

Java虚拟机面试题汇总
目录 1. JVM的主要组成部分及其作用? 1.1 运行时数据区划分? 1.2 哪些区域可能会发生OOM? 1.3 堆和栈的区别? 1.4 内存模型中的happen-before是什么? 2. HotSpot虚拟机对象创建流程? 2.1 类加载过程…...
C++休眠的方法
Windows的API函数 Sleep(INFINITE); 休眠时间为永久 Linux的API函数sleep 没有直接表示无限时间的参数,根据POSIX标准,sleep() 函数的参数应该是 unsigned int 类型,因此最大可以接受的参数值是 UINT_MAX,即 4294967295 秒。sleep…...

选择排序(C语言版)
选择排序是一种简单直观的排序算法 算法实现 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 重复第二步&…...

基于CentOS Stream 9平台搭建FRP内网穿透
内网穿透方法很多,本文以github上很火的frp为例 1.frp官方 文档:https://gofrp.org/zh-cn/docs/overview/ 1.1 下载 https://github.com/fatedier/frp/releases 选中合适的版本 2. 服务端(服务器)搭建frps 需要公网IP服务器 选…...

Redis管理禁用命令
在redis数据量比较大时,执行 keys * ,fluashdb 这些命令,会导致redis长时间阻塞,大量请求被阻塞,cpu飙升,严重可能导致redis宕机,数据库雪崩。所以一些命令在生产环境禁止使用。 Redis 禁用命令…...

RFID智能锁控系统在物流安全运输中的应用与效益分析
一、物流锁控系统现状与挑战 1.1 传统锁控系统的局限性 安全性不足:机械锁容易被撬开或钥匙被复制,导致货物在运输过程中面临被盗风险。 无法实时追踪:一旦货物离开发货点,物流公司无法实时监控货物状态,增加了货物…...
WPF设置全局样式
目的 创建一个资源字典,自动引入到各个Window或者UserControl中,可以随意使用。或者引入多个控件包,为了做兼容,保证可以引用多个控件库。 1. 定义资源字典 首先,你需要创建一个XAML文件来定义你的资源字典…...

【福利】代码公开!咸鱼之王自动答题脚本
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 微信或QQ打开咸鱼之王小程序,进入答题界面,运行main.py。期间不要动鼠标。 可自行更改代码来适配自己的需求~ 可以按照示例图片…...

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建技术
在过去几年中,人工智能领域的发展迅猛,尤其是大语言模型的应用,为各行各业带来了前所未有的创新与突破。从ChatGPT-3.5的推出到GPT Store的上线,再到最新的多模态交互ChatGPT-4o,OpenAI不断引领科技潮流,推…...

使用clion刷leetcode
如何优雅的使用clion刷leetcode 安装插件:LeetCode Editor) 插件配置: 这样我们每打开一个项目,就会创建类似的文件 我们的项目结构: 我们在题解文件中导入头文件myHeader.h并将新建的文件添加到cmakelists.txt文件,…...

图解HTTP(5、与 HTTP 协作的 Web 服务器 6、HTTP 首部)
5、与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率。 用单台虚拟主机实现多个域名 在相同的 IP 地址下,由于虚拟主机可以寄存多个不同主机名和域名的 Web 网站,因此…...

JS之防抖和节流
防抖 (debounce) 所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。 ps: 重置普攻,百度翻译要输完停止一定时间后才翻译。 没有防抖和节流的缺点: 函数触发…...
Open3D 点云PCA算法配准(粗配准)
目录 一、概述 1.1PCA配准的原理 1.2PCA配准的应用 二、代码实现 三、实现效果 3.1原始点云 3.2配准后点云 3.3变换矩阵 一、概述 PCA(Principal Component Analysis,主成分分析)是一种用于降维和特征提取的统计方法。在点云处理中,PCA可以用于点云配准(a…...

Transformer中的编码器和解码器结构有什么不同?
Transformer背后的核心概念:注意力机制;编码器-解码器结构;多头注意力等; 例如:The cat sat on the mat; 1、嵌入: 首先,模型将输入序列中的每个单词嵌入到一个高维向量中表示&…...

【深度学习】第5章——卷积神经网络(CNN)
一、卷积神经网络 1.定义 卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理具有网格状拓扑结构数据的深度学习模型,特别适用于图像和视频处理。CNN 通过局部连接和权重共享机制,有效地减少了参数数量&#x…...

fluwx插件实现微信支付
Flutter开发使用fluwx插件实现微信支付,代码量不多,复杂的是安卓和iOS的各种配置。 在 pubspec.yaml 文件中添加fluwx依赖 fluwx: ^4.5.5 使用方法 通过fluwx注册微信Api await Fluwx().registerApi(appId: wxea7a1c53d9e5849d, universalLink: htt…...

k8s核心操作_Deployment的扩缩容能力_Deployment自愈和故障转移能力---分布式云原生部署架构搭建022
然后我们上面说了k8s中的deployment的多副本能力 然后,我们再来看 k8s中的deployment的扩缩容能力 可以看到,对于扩容,要使用 kubectl scale 命令 对于缩容 要使用kubectl scale 命令都是使用这个命令对吧 来试试,可以看到上面命令 首先看看 kubectl get pod 可以看到有…...

P8306 【模板】字典树
题目描述 给定 n 个模式串 s1,s2,…,sn 和 q 次询问,每次询问给定一个文本串 ti,请回答 s1∼sn 中有多少个字符串 sj 满足 ti 是 sj 的前缀。 一个字符串 t 是 s 的前缀当且仅当从 s 的末尾删去若干个(可以为 0 个&#…...

面试官:讲一下如何终止一个 Promise 继续执行
我们知道 Promise 一旦实例化之后,状态就只能由 Pending 转变为 Rejected 或者 Fulfilled, 本身是不可以取消已经实例化之后的 Promise 了。 但是我们可以通过一些其他的手段来实现终止 Promise 的继续执行来模拟 Promise 取消的效果。 Promise.race …...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...