js版本之ES6特性简述【let和const、数组、函数、集合、Symbol】(四)
目录
let [块级作用域] 和const简述
Array.from
Array.of
Array.prototype中新增的方法
for...of
函数参数调整
集合类型 Map + Set + WeakMap + WeakSet
Set
WeakSet
Map
WeakMap
Symbol 类型
let [块级作用域] 和const简述
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{ let a = 10; var b = 1; }a // ReferenceError: a is not defined.
b // 1
let 实际上为 JavaScript 新增了块级作用域。
下面的函数有两个代码块,都声明了变量 n,运行后输出 5。这表示外层代码块不受内层代码块的影响。如果两次都使用var定义变量 n,最后输出的值才是 10。
function f1() {let n = 5;if (true) {let n = 10;}console.log(n); // 5
}
- 允许在块级作用域内声明函数。
- 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
- 同时,函数声明还会提升到所在的块级作用域的头部。
注:上面三条规则只对 ES6 的浏览器实现有效,其他环境的实现不用遵守,还是将块级作用域的函数声明当作let处理。
const 声明一个只读的常量。一旦声明,常量的值就不能改变。
注:const变量指向的是一个对象或数组,那么对象或数组的内容是可以被修改的
如需了解let、const和var区别可以参看此文:简述let、const和var的区别
Array.from
Array.from()是JavaScript中一个非常有用的方法,它可以将类似数组或可迭代对象(iterable)转换为真正的数组。这个方法在处理一些特殊的数据结构或需要对数据进行操作时非常方便。
语法:【 Array.from(arrayLike[, mapFn[, thisArg]]) 】
参数:
- arrayLike 想要转换成数组的伪数组对象或可迭代对象。
- mapFn
(
可选参数)
如果指定了该参数,新数组中的每个元素会执行该回调函数。- thisArg
(
可选参数)
,执行回调函数mapFn
时this
对象。返回值:一个新的数组实例。
从字符串获得数组
Array.from('foo');
// ["f", "o", "o"]
从集合中获得数组
var s = new Set(['foo', window]);
Array.from(s);
// ["foo", window]
从映射中获得数组
var m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m);
// [[1, 2], [2, 4], [4, 8]]
从一个类似数组的对象中获得数组(其作为array构造时的参数)
function f() { return Array.from(arguments); }f(1, 2, 3); // [1, 2, 3]
Array.of
Array.of,可以将传入的一组参数值转换为数组
Array.of()
和 Array构造函数之间的区别在于处理整数参数:Array.of(7) 创建一个具有单个元素7的数组,而 Array(7) 创建一个包含7个undefined元素的数组。
Array.of(7); // [7]
Array.of(1, 2, 3); // [1, 2, 3]Array(7); // [ , , , , , , ]
Array(1, 2, 3); // [1, 2, 3]
Array.prototype中新增的方法
- Array.prototype.copyWithin,可以在当前数组内部将指定位置的数组项复制到其他位置,然后返回当前数组,使用 copyWithin 方法会修改当前数组
- Array.prototype.fill,使用给定值,填充一个数组,会改变原来的数组
- Array.prototype.find,用于找出第一个符合条件的数组元素,有点类似于 filter
- Array.prototype.findIndex,用来返回某个特定数组元素在数组中的位置
- Array.prototype.entries,对数组中键值对进行遍历
- Array.prototype.keys,对数组键名进行遍历
- Array.prototype.values,对数组键值进行遍历
Array.prototype[Symbol.iterator]()方法返回一个迭代器对象,用于遍历数组的所有值。
Array.prototype[Symbol.iterator]()方法返回的值和Array.prototype.values()方法返回的值是一样的。
for...of
语句在可迭代对象(包括Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。
延伸知识请看此文:for...in 和 for...of 的区别
函数参数调整
ES6 对函数参数进行了新的设计,主要添加了默认参数、不定参数和扩展参数
不定参数和扩展参数可以认为恰好是相反的两个模式,不定参数是使用数组来表示多个参数,扩展参数则是将多个参数映射到一个数组。
需要注意:不定参数的 ... 和数组复制的 ... 是有区别的,不定参数可以使用函数的形参来表示所有的参数组成的列表。以前的 arguments 变量也有类似的作用,但是 arguments 不是真正的数组,除了存放参数的列表外,arguments 还有 length 属性,严格来说 arguments 是一个类数组对象,而不定参数则是一个完全的数组,这也是不定参数相对于 arguments 的优势,更加方便我们使用,所以建议使用不定参数来代替 arguments。
// 默认参数
function sayHi(name ="zhangsan ){console.log(Hello ${name})
}
sayHi()// Hello zhangsan// 不定参数
function sayHi(...name){console.log(name.reduce((a,b)=>Hello ${a} ${b}))
}
sayHi('zhangsan','lisi')// 扩展参数
let name =['zhangsan','lisi']
function sayHi(namel,name2){console.log(Hello ${name1} ${name2})
}
sayHi(...name)
集合类型 Map + Set + WeakMap + WeakSet
Set
Set 本身是一个构造函数 ,用来生成 Set 数据结构,Set 类似于数组(但它不是数组),Set 的成员的值都是唯一的,没有重复的值,也常用它来去重(不可以传递对象)。像 Set 加入值的时候,不会发生类型转换,所以 5 和 “5” 是两个不同的值。
const arr =new Set([1,2,3,4,5,5,5,5])
console.log(arr) //[1,2,3,4,5]
console.log(arr.size) //5
操作方法:
- size:返回Set 实例的成员总数,只读属性
- add(value),添加某个值,返回 Set 结构本身
- delete value,删除某个值,返回一个布尔值,表示删除是否成功
- has(value),返回一个布尔值,表示该值是否为 Set 成员
- clear(),清除所有成员,没有返回值
const s = new Set([1, 2, 3, 4]);console.log(s); // Set(4) { 1, 2, 3, 4 }
console.log(s.add(5).add({ a: 6 }).add(1)); // Set(6) { 1, 2, 3, 4, 5, { a: 6 } } 返回 Set 本身
console.log(s); // Set(6) { 1, 2, 3, 4, 5, { a: 6 } } 重复项没有新增会自动去重console.log(s.size); // 6
s.size = 5; // 设置无效只读属性
console.log(s.size); // Set(6) { 1, 2, 3, 4, 5, { a: 6 } } console.log(s.delete(1)); // true
console.log(s); // Set(5) { 2, 3, 4, 5, { a: 6 } }console.log(s.has(2)) // true
console.log(s.clear()); // undefined 没有返回值
console.log(s); // Set(0) {}
遍历方法:
- keys(),返回键名的遍历器
- values(),返回键值的遍历器
- entries(),返回键值对的遍历器
- forEach(),使用回调函数遍历每个成员
const s = new Set(["a", "b", "c"]);
for (const item of s.keys()) {console.log(item)
}
// a, b, c 依次打印
for (const item of s.values()) {console.log(item)
}
// a, b, c 依次打印
for (const item of s.entries()) {console.log(item)
}
// ["a","a"], ["b", "b"], ["c", "c"]// 直接遍历set实例,等同于遍历set实例的values方法
for (let item of s) {console.log(item)
}
// a, b, c 依次打印
s.forEach((item, index, self) => {console.log(item, index, self);
})
// a a Set(3) { 'a', 'b', 'c' } , b b Set(3) { 'a', 'b', 'c' } , c c Set(3) { 'a', 'b', 'c' }
// set集合中不存在下标,因此forEach中的回调的第二个参数和第一个参数是一致的,均表示set中的每一项
WeakSet
WeakSet 结构与 Set 类似,也是不重复的值的集合,但是,它与 Set 有两个区别:
- WeakSet 的成员只能是对象,而不能是其他类型的值。
- WeakSet 中的对象都是弱引用,即垃圾回收机制 不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不在引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象是否还存在于 WeakSet 中。因此 ES6 规定 WeakSet 不可遍历。
Map
传统的 JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是只能用字符串当做键,这给它的使用带来了很大的限制,而 ES6 提供了 Map 数据结构,它类似于对象,也是键值对的集合,但是“键” 的范围不限于字符串,各种类型的值(包括对象)都可以当做键。也就是说,Object 结构提供了“字符串-值”的对应,Map 结构提供了“值-值”的对应,是一种更完善的 Hash 结构实现。Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。
操作方法:
- size:返回Map实例的人员总数,只读属性
- set(key, value),设置 key 所对应的键值,返回整个 Map 结构 ,如果 key 已经有值,则键值会被更新,否则就生成该键
- get(key),读取 key 对应的键值,如果在好不到 key,则返回 undefined
- has(key),返回一个 布尔值,表示某个键是否在 Map 数据结构中
- delete(key),删除某个键,返回 true,如果删除失败,则返回 false
- clear(),清除所有成员,没有返回值
const map = new Map();console.log(map.set({}, 1).set(false, 2).set("abc", 4).set("abc", 5));
// Map(3) { {} => 1, false => 2, 'abc' => 5 } 返回 Map console.log(map);
// Map(3) { {} => 1, false => 2, 'abc' => 5 } // 添加相同的键为更新,不同则添加 console.log(map.get("abc")) // 5 get 获取值使用到自身 has 方法是否含有
console.log(map.get({})); // undefined console.log(map.has(false)); // true has方法也是采用 Object.is() 进行比较
map.size = 5;
console.log(map.size); // 3 只读属性设置无效console.log(map.delete({})); // false 引用类型比较时地址的比较
console.log(map.delete(false));// trueconsole.log(map.clear()); // undefined
console.log(map); // Map(0) {}
遍历方法:
- keys(),返回键名的遍历器
- values(),返回键值的遍历器
- entries(),返回所有成员的遍历器
- forEach(),遍历 Map 的所有成员
const m = new Map([[1, 'a'], [2, 'b']]);for (let key of m.keys()) {console.log(key); // 1 2
}for (let value of m.values()) {console.log(value); // 'a' 'b'
}for (let item of m.entries()) {console.log(item[0], item[1]); // 1 'a' 2 'b'
}// 或者
for (let [key, value] of m.entries()) {console.log(key, value); // 1 'a' 2 'b'
}// 等同于使用m.entries()
for (let [key, value] of m) {console.log(key, value); // 1 'a' 2 'b'
}m.forEach((value, key, m) => {console.log("Key: %s, Value: %s", key, value);
});
//Key: 1, Value: a Key: 2, Value: b m.forEach(item => {console.log(item) // 'a' 'b'
})
WeakMap
WeakMap 结构与 Map 结构类似,也用于生成键值对的集合,但 WeakMap 与 Map 有两个区别:
- WeakMap 只接受对象作为键名(null 除外),不接受其他类型的值作为键名。
- WeakMap 的键名所指向的对象不计入垃圾回收机制。它的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内,因此,只要所引用的对象的其他引用被清除了,垃圾回收机制就会释放该对象所占用的内存。也就是说, 一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。基本上,如果要想对象中添加数据又不想干扰垃圾回收机制,便可以使用 WeakMap。一个典型的应用场景是,在网页的 DOM 元素上添加数据时就可以使用 WeakMap 结构,当该 DOM 元素被清除,其对应的 WeakMap 记录就会自动被移除。
注意:WeakMap 的专用场景就是它的键所对应的对象可能会在将来消失,WeakMap 结构有助于防止内存泄露。但是,WeakMap 弱引用的只是键名而不是键值,键值依然是正常引用的。
Symbol 类型
Symbol是ES6 引入了一种新的原始数据类型,表示独一无二的值
Symbol 值通过 Symbol 函数生成,一般作为属性键值,并且能避免对象属性键的命名冲突。也就是说,对象的属性名现在可以有两种类型:一种是原来就有的字符串,另一种就是新增的 Symbol 类型。只要属性名属于 Symbol 类型,就是独一无二的,可以保证不会与其他属性名产生冲突。
注意:Symbol 函数前不能使用 new 命令,否则会报错,这是因为生产的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。
Symbol 函数的参数只表示对当前 Symbol 值的描述,因此相同参数的 Symbol 函数的返回值是不相等的。
Symbol 值作为对象属性名时不能使用点运算符:
let s=Symbol()
let obj ={[s]:function(){console.log('Hello')}
}
obj[s]()//'Hello
Symbol 做为属性名,该属性不会出现在 for...in,for...of 循环中,也不会被 Object.keys()、Object.getOwnpropertyNames() 返回,但它也不是私有属性,Object.getOwnPropertySymbols() 可以获取指定对象的所有 Symbol 属性名。 Object.getOwnPropertySymbols() 返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值。
上一章:js版本之ES6特性简述【类(class)、模块化(ES Module) 、j箭头函数、函数参数默认值、模板字符串、解构赋值、扩展运算符、对象属性简写、Promise】(三)
下一章:js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)
相关文章:
js版本之ES6特性简述【let和const、数组、函数、集合、Symbol】(四)
目录 let [块级作用域] 和const简述 Array.from Array.of Array.prototype中新增的方法 for...of 函数参数调整 集合类型 Map Set WeakMap WeakSet Set WeakSet Map WeakMap Symbol 类型 let [块级作用域] 和const简述 ES6 新增了let命令,用来声明变…...
重温设计模式--4、组合模式
文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…...
解决Ubuntu下无法装载 Windows D盘的问题
电脑安装了 Windows 和 Ubuntu 24.04 后,在Ubuntu系统上装载 D盘,发现无法装载错误如下: Error mounting /dev/nvme0n1p4 at /media/jackeysong/Data: wrong fs type, bad option, bad superblock on /dev/nvme0n1p4, missing codepage or h…...
详细介绍如何使用rapidjson读取json文件
本文主要详细介绍如何使用rapidjson库来实现.json文件的读取,分为相关基础介绍、结合简单示例进行基础介绍、结合复杂示例进行详细的函数实现介绍等三部分。 一、相关基础 1、Json文件中的{} 和 [] 在 JSON 文件中,{} 和 [] 分别表示不同的数据结构&…...
Mybatis 如何复用 SQL
比如你的Mapper是这样写的: 但这个接口是没有分页的,你还想再写一个有分页的查询接口,两个接口SQL一模一样,只是多了分页特性。你可以直接重载一个方法,增加分页参数,即可复用该SQL。如下:...
使用 Python 操作 MySQL 数据库的实用工具类:MySQLHandler
操作数据库是非常常见的需求,使用 Python 和 pymysql 库封装一个通用的 MySQL 数据库操作工具类,并通过示例演示如何使用这个工具类高效地管理数据库。 工具类的核心代码解析 MySQLHandler 类简介 MySQLHandler 是一个 Python 类,用于简化…...
C++ 内存管理:原理、技巧与实战
目录 第一章:C++ 内存管理基础 1.1 C++ 内存布局剖析 1.2 内存分配与释放:核心机制详解 1.2.1 new/delete 操作符 1.2.2 malloc/free 函数 第二章:智能指针 —— 内存管理利器 2.1 智能指针概览 2.2 常用智能指针类型 2.2.1 unique_ptr 2.2.2 shared_ptr 2.2.3 we…...
算法学习(17)—— FloodFill算法
目录 关于FloodFill算法 部分OJ题详解 733. 图像渲染 200. 岛屿数量 695. 岛屿的最大面积 130. 被围绕的区域 417. 太平洋大西洋水流问题 529. 扫雷问题 LCR130. 衣橱整理 关于FloodFill算法 爆搜,深搜,回溯的算法原理并不难,这类题…...
Kubernetes ConfigMap的创建与使用
前提条件 拥有Kubernetes集群环境,可参考:Kubernetes集群搭建理解Kubernetes部署知识,可参考:使用Kubernetes部署第一个应用 、Deloyment控制器 ConfigMap简介 ConfigMap 是 Kubernetes(通常简称为 K8s)中…...
灵当CRM uploadfile.php 文件上传致RCE漏洞复现
0x01 产品简介 灵当CRM是一款专为中小企业打造的智能客户关系管理工具,由上海灵当信息科技有限公司开发并运营。广泛应用于金融、教育、医疗、IT服务、房地产等多个行业领域,帮助企业实现客户个性化管理需求,提升企业竞争力。无论是新客户开拓、老客户维护,还是销售过程管…...
老旧小区用电安全保护装置#限流式防火保护器参数介绍#
摘要 随着居民住宅区用电负荷的增加,用电安全问题日益突出,火灾隐患频繁发生。防火限流式保护器作为一种新型电气安全设备,能够有效预防因电气故障引发的火灾事故。本文介绍了防火限流式保护器的工作原理、技术特点及其在居民住宅区用电系统…...
在git commit之前让其自动执行一次git pull命令
文章目录 背景原因编写脚本测试效果 背景原因 有时候可以看到项目的git 提交日志里好多 Merge branch ‘master’ of …记录。这些记录是怎么产生的呢? 是因为在本地操作 git add . 、 git commit -m "xxxxx"时,没有提前进行git pull操作&…...
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(2023/12/1更新)
文章目录 一、前言二、ShaderGraph1.什么是ShaderGraph2.在使用ShaderGraph时需要注意以下几点:3.优势4.项目 三、实例效果边缘发光进阶:带方向的菲涅尔边缘光效果裁剪进阶 带边缘色的裁剪溶解进阶 带边缘色溶解卡通阴影水波纹积雪效果不锈钢效果、冰晶效…...
单机和微服务的区别,微服务有什么问题?数据一致性问题怎么解决?幂等问题怎么解决?
单机和微服务的区别,微服务有什么问题?数据一致性问题怎么解决?幂等问题怎么解决? 单机架构和微服务架构在设计理念、部署和扩展性上有显著区别。 单机架构 vs 微服务架构 单机架构 定义:所有组件(前端…...
McDonald‘s Event-Driven Architecture 麦当劳事件驱动架构
原文链接 1 mcdonalds-technical-blog/ 原文链接 2 mcdonalds-technical-blog/ 麦当劳在异步、事务性和分析性处理用例中使用跨技术栈的事件,包括移动订单进度跟踪和向客户发送营销通信(交易和促销)。 统一事件平台(unified eve…...
Clickhouse(Centos)
地址信息 官网地址:Fast Open-Source OLAP DBMS - ClickHouse 下载地址:packages.clickhouse.com/rpm/stable/ 1.clickhouse-client-23.1.3.5.x86_64.rpm 2.clickhouse-common-static-23.1.3.5.x86_64.rpm 3.clickhouse-common-static-dbg-23.1.3.5.x86_…...
赛博错题本
机构抽象老师非得让我们整一个错题本,我寻思都学计算机了,还在整高中做题呢一套是什么意思呢,更何况考试也就一周一次,你整个本完完全全没有必要,整个赛博错题本得了。以后错题都会存在这里,基本上一周一更…...
【MySQL初阶】Ubuntu 环境安装 MySQL
🎉博主首页: 有趣的中国人 🎉专栏首页: 数据库初阶 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 Ubuntu 系统安装 MySQL 的相关内容。 如果看到最后您觉得这篇…...
【Kubernetes 指南】基础入门——Kubernetes 基本概念(二)
目录 二、Pod 1、Pod 简介 2、Pod 图示 3、nginx 容器 二、Pod 1、Pod 简介 - Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器。 - Pod 是一组紧密关联的容器集合,它们共享 PID、IPC、Network 和 UTS namespace&#…...
Ubuntu系统下 npm install -g tauri 报错问题处理
处理在安装 Tauri 时遇到的问题,可以按照以下步骤进行操作 npm install -g taurinpm warn deprecated inflight1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async …...
数字逻辑(六)——下载Digital软件
Digital是一种用于设计和仿真数字逻辑电路的教育工具,它是免费、开源和跨平台的。这款软件十分适合新人,可以使用画简单的电路。 1 下载Digital软件 首先Digital的下载地址是: https://github.com/hneemann/Digital 下载完成之后&…...
Ruby Raider使用教程
Ruby Raider是什么? Ruby Raider 是一款生成器和脚手架 gem,可让 UI 测试自动化更容易 Github链接:https://github.com/RaiderHQ/ruby_raider 目前支持的框架 Web自动化测试 Cucumber and Selenium Rspec and Selenium Cucumber and Wa…...
音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现
音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…...
Spring Boot 中的 @Scheduled 定时任务以及开关控制
Scheduled注解是Spring框架(包括Spring Boot)中用于实现定时任务的一种方式。以下是对Scheduled注解的详细解析: 一、基本概念 Scheduled注解允许开发者在Spring容器中定义定时任务。通过简单地在一个方法上添加Scheduled注解,S…...
基于PXE与NFS共享的Ubuntu安装配置过程
假设存在服务器A、B、C 其中A为待装系统的服务器,DHCP(IP池:192.168.0.150~192.168.0.160),假设需要安装的系统为Ubuntu 22.04 Desktop 其中B为PXE服务端服务器,IP: 192.168.0.100,这里将以Cent…...
Dots 常用操作
游戏中有多个蚂蚁群落,每个蚂蚁属于一个群落,如何设计数据结构? 方法1:为蚂蚁组件添加一个属性 ID,会造成逻辑中大量分支语句,如果分支语句逻辑不平衡可能带来 Job 调度问题,每个蚂蚁会有一份蚂…...
力扣-图论-20【算法学习day.70】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
ModbusTCP从站转Profinet主站案例
一. 案例背景 在复杂的工业自动化场景中,企业常常会采用不同品牌的设备来构建生产系统。西门子SINAMICS G120变频器以其高性能、高精度的速度和转矩控制功能,在电机驱动领域应用广泛。施耐德M580可编程逻辑控制器则以强大的逻辑控制和数据处理能力著称&…...
Linux 线程池
1.概念介绍 线程池是一种多线程处理形式,它维护着多个线程,这些线程处于等待状态,随时准备接受任务并执行。线程池的主要目的是为了提高系统的性能和资源利用率,避免在处理短时间任务时频繁创建和销毁线程所带来的开销。 线程池…...
计算机视觉目标检测-1
文章目录 摘要Abstract1.目标检测任务描述1.1 目标检测分类算法1.2 目标定位的简单实现思路1.2.1 回归位置 2.R-CNN2.1 目标检测-Overfeat模型2.1.1 滑动窗口 2.2 目标检测-RCNN模型2.2.1 非极大抑制(NMS) 2.3 目标检测评价指标 3.SPPNet3.1 spatial pyr…...
2024最新鸿蒙开发面试题合集(一)-HarmonyOS NEXT Release(API 12 Release)
1. HarmonyOS应用打包后的文件扩展名是? 打包后的文件扩展名为.hap(HarmonyOS Ability Package),这是HarmonyOS应用的标准包格式 2. 页面和自定义组件生命周期有哪些? 页面和自定义组件生命周期说明 有Entry装饰器的component组件的生命…...
HarmonyOS NEXT 实战之元服务:静态案例效果--航空出行
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: import { authentication } …...
详解 Python 中的json.loads和json.dumps方法:中英双语
中文版 详解 Python 中的 json.loads 和 json.dumps 方法 在 Python 的标准库中,json 模块用于处理 JSON 数据格式。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端交互以及数据存储。json.loads …...
成方金融科技后端部分笔试题 - 解析
单选题 1.以下关于JAVA自动类型转换,描述错误的是哪一项?(B) A.byte->short B.char->short C.char->int D.float->double 2.请选择运行以下代码后,系统显示的内容什么?(B) public class Test {static {int x1;}static int x,y;publ…...
互联网视频云平台EasyDSS无人机推流直播技术如何助力野生动植物保护工作?
在当今社会,随着科技的飞速发展,无人机技术已经广泛应用于各个领域,为我们的生活带来了诸多便利。而在动植物保护工作中,无人机的应用更是为这一领域注入了新的活力。EasyDSS,作为一款集视频处理、分发、存储于一体的综…...
Vue3 中使用axios
1.安装axios、js-cookie、pinia axios命令行: npm install axios js-cookie命令行: npm install js-cookie store命令行: npm install pinia 2.配置文件 (1)缓存文件配置 src/plugins/auth.js const sessionCache {set (key, valu…...
【JAVA高级篇教学】第五篇:OpenFeign 微服务调用注意事项
在微服务架构中,OpenFeign 是一种常用的 HTTP 客户端工具,用于实现服务之间的调用。它提供了声明式的接口调用方式,大幅简化了开发工作。然而,在实际使用中,需要注意一些细节,尤其是在处理 GET、POST 请求和…...
Llama 3 简介(一)
目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练(Over-training) 3. 计算训练预算 4. 如何逐步估算和确定最优模型? 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…...
路由器做WPAD、VPN、透明代理中之间一个
本文章将采用家中TP-Link路由器 路由器进行配置DNS DNS理解知识本文DNS描述参考:网络安全基础知识&中间件简单介绍_计算机网络中间件-CSDN博客 TP LINK未知的错误,错误编号:-22025 TP-LINK 认证界面地址:https://realnam…...
Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总
问题1:打包的过程中不断提示 :codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决:打开钥匙串,点击证书---显示简介---信任----改为始终信任 (记住 :不能只修改钥匙的显示简介的…...
【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹
代码 [MenuItem("Assets/Open Explorer/PersistentDataPath")]public static void OpenPersistentDataPath(){Application.OpenURL(Application.persistentDataPath);}[MenuItem("Assets/Open Explorer/DataPath")]public static void OpenDataPath(){Appl…...
shardingsphere分库分表项目实践1-让shardingsphere运行起来
学习新技术最快的方式就是: 1. 先找一个比较完善的demo跑起来 2. 弄清楚用法:配置、原理、使用场景 3. 移植到自己项目上,按照自己需求进行修改优化。 找demo项目的方法:优先去官方git库找,如果没有或者过于简单那么…...
Java预加载
预加载(Preload)是一种在程序运行之前预先加载所需资源或对象的优化技术,旨在提高程序的性能和响应速度。以下是对预加载的详细解释: 一、预加载的定义 预加载是指在程序实际运行之前,将预计会频繁使用的资源&#x…...
Vue3之状态管理Vuex
Vuex作为Vue.js的官方状态管理库,在大型或复杂的前端项目中扮演着至关重要的角色。本文将从Vuex的原理、特点、应用场景等多个方面进行深入解析,并通过代码示例展示如何在Vuex中实现特定功能。 一、Vuex原理 Vuex是一个专为Vue.js应用程序开发的状态管…...
优化 invite_codes 表的 SQL 创建语句
-- auto-generated definition create table invite_codes (id int auto_incrementprimary key,invite_code varchar(6) not null comment 邀请码,6位整数,确保在有效期内…...
ctfhub disable_functions关卡
1.CTFHub Bypass disable_function —— LD_PRELOAD 2.CTFHub Bypass disable_function —— ShellShock 3.CTFHub Bypass disable_function —— Apache Mod CGI 4.CTFHub Bypass disable_function —— 攻击PHP-FPM 5.CTFHub Bypass disable_function —— GC UAF 6.CTFHub B…...
Pikachu 漏洞练习平台 XXE漏洞学习记录
懒得自己搭建的可以直接FOFA找别人的靶场玩 FOFA "Pikachu 漏洞练习平台" 开始 随便输入个包含命名实体(内部实体)的xml数据(以下代码中xxe是命名实体的实体名称): <?xml version"1.0"?>…...
机器学习基础 衡量模型性能指标
目录 1 前言 编辑1.1 错误率(Error rate)&精度(Accuracy)&误差(Error): 1.2 过拟合(overfitting): 训练误差小,测试误差大 1.3 欠拟合(underfitting):训练误差大,测试误差大 1.4 MSE: 1.5 RMSE: 1.6 MAE: 1.7 R-S…...
C#—内建接口: IEnumerable与IEnumerator接口详解
IEnumerable接口 在C#中,IEnumerable 是一个泛型接口,它表示一个可以通过 IEnumerator 迭代器进行迭代枚举的集合。这个接口是非常基础且重要的,因为它允许开发者以一致的方式遍历任何实现了该接口的集合,无论是数组、列表、自定…...
java日志框架:slf4j、jul(java.util.logging)、 log4j、 logback
SLF4J--抽象接口 SLF4J (Simple Logging Facade for Java) 是一个为各种 Java 日志框架提供简单统一接口的库。它的主要目的是将应用程序代码与具体的日志实现解耦,使得在不修改应用程序代码的情况下,可以轻松地切换不同的日志框架。 jul-to-slft4j.ja…...