Lodash的常用方法整理

Lodash的常用方法

安装 Lodash

首先,确保你已经安装了 Lodash 库。你可以使用 npm 或 yarn 来安装:

npm install lodash

或者

yarn add lodash

1、使用 Lodash 进行类型检查

在 JavaScript 开发中,类型检查是一个非常重要的环节,尤其是在处理复杂的数据结构时。Lodash 提供了一系列强大的类型检查函数,可以帮助我们更安全、更高效地进行类型判断。本文将详细介绍这些函数的用法和示例。

常用的类型检查函数及其用法

常用的类型检查函数如下:

函数名称功能描述示例
cloneDeep创建一个对象或数组的深拷贝cloneDeep({ a: [1, 2, 3], b: { c: 4 } })
isArray检查值是否为数组isArray([])
isFunction检查值是否为函数isFunction(function() {})
isObject检查值是否为对象(包括数组和函数)isObject({})
isNaN检查值是否为 NaNisNaN(NaN)
isNumber检查值是否为数字isNumber(123)
isInteger检查值是否为整数isInteger(123)
isNil检查值是否为 null 或 undefinedisNil(null)
isEmpty检查值是否为空isEmpty('')
isArguments检查值是否为 arguments 对象isArguments(arguments)
isBuffer检查值是否为 Node.js 的 Buffer 对象isBuffer(Buffer.from('abc'))
isDate检查值是否为 Date 对象isDate(new Date())
isElement检查值是否为 DOM 元素isElement(document.createElement('div'))
isRegExp检查值是否为正则表达式对象isRegExp(/abc/)
isSet检查值是否为 Set 对象isSet(new Set())
isString检查值是否为字符串isString('abc')
isSymbol检查值是否为符号isSymbol(Symbol('abc'))
isUndefined检查值是否为 undefinedisUndefined(undefined)
isError检查值是否为 Error 对象isError(new Error())
isFinite检查值是否为有限数值isFinite(123)
isLength检查值是否为有效的数组长度isLength(5)
isMap检查值是否为 Map 对象isMap(new Map())
isMatch检查对象是否匹配指定的属性值isMatch({ a: 1, b: 2 }, { a: 1 })
isNative检查值是否为原生函数isNative(Array.prototype.push)
isPlainObject检查值是否为纯对象(即通过 {}new Object 创建的对象)isPlainObject({})
isTypedArray检查值是否为类型化数组(如 Uint8ArrayInt32Array 等)isTypedArray(new Uint8Array())
isWeakMap检查值是否为 WeakMap 对象isWeakMap(new WeakMap())
isWeakSet检查值是否为 WeakSet 对象isWeakSet(new WeakSet())

以下是具体使用方法

1. cloneDeep

用于创建一个对象或数组的深拷贝,拷贝意味着不仅复制对象的顶层属性,还会递归地复制所有嵌套的对象和数组,从而确保原始对象和拷贝对象完全独立,互不影响。

import { cloneDeep } from 'lodash';const original = { a: [1, 2, 3], b: { c: 4 } };
const copied = cloneDeep(original);console.log(copied); // { a: [1, 2, 3], b: { c: 4 } }
console.log(copied === original); // false
console.log(copied.a === original.a); // false
console.log(copied.b === original.b); // false

2. isArray

检查值是否为数组。

import { isArray } from 'lodash';console.log(isArray([])); // true
console.log(isArray({})); // false
console.log(isArray('string')); // false

3. isFunction

检查值是否为函数。

import { isFunction } from 'lodash';console.log(isFunction(function() {})); // true
console.log(isFunction(() => {})); // true
console.log(isFunction({})); // false

4. isObject

检查值是否为对象(包括数组和函数)。

import { isObject } from 'lodash';console.log(isObject({})); // true
console.log(isObject([])); // true
console.log(isObject(function() {})); // true
console.log(isObject(123)); // false

5. isNaN

检查值是否为 NaN(注意:NaN 是唯一不等于自身的值)。

import { isNaN } from 'lodash';console.log(isNaN(NaN)); // true
console.log(isNaN(123)); // false
console.log(isNaN('string')); // false

6. isNumber

检查值是否为数字。

import { isNumber } from 'lodash';console.log(isNumber(123)); // true
console.log(isNumber(123.45)); // true
console.log(isNumber('123')); // false

7. isInteger

检查值是否为整数。

import { isInteger } from 'lodash';console.log(isInteger(123)); // true
console.log(isInteger(123.45)); // false
console.log(isInteger('123')); // false

8. isNil

检查值是否为 null 或 undefined。

import { isNil } from 'lodash';console.log(isNil(null)); // true
console.log(isNil(undefined)); // true
console.log(isNil('string')); // false

9. isEmpty

检查值是否为空。对于不同类型的值,isEmpty 的判断标准如下:

  • 字符串:长度为 0。
  • 数组:长度为 0。
  • 对象:没有自己的可枚举属性。
  • MapSet:大小为 0。
  • 其他:总是返回 false
import { isEmpty } from 'lodash';console.log(isEmpty('')); // true
console.log(isEmpty([])); // true
console.log(isEmpty({})); // true
console.log(isEmpty(new Map())); // true
console.log(isEmpty(new Set())); // true
console.log(isEmpty('string')); // false
console.log(isEmpty([1, 2, 3])); // false
console.log(isEmpty({ key: 'value' })); // false

10. isArguments

检查值是否为 arguments 对象。

import { isArguments } from 'lodash';function test() {console.log(isArguments(arguments)); // true
}test();
console.log(isArguments([])); // false

11. isBuffer

检查值是否为 Node.js 的 Buffer 对象。

import { isBuffer } from 'lodash';console.log(isBuffer(Buffer.from('abc'))); // true
console.log(isBuffer([])); // false

12. isDate

检查值是否为 Date 对象。

import { isDate } from 'lodash';console.log(isDate(new Date())); // true
console.log(isDate('2023-10-01')); // false

13. isElement

检查值是否为 DOM 元素。

import { isElement } from 'lodash';const div = document.createElement('div');
console.log(isElement(div)); // true
console.log(isElement({})); // false

14. isRegExp

检查值是否为正则表达式对象。

import { isRegExp } from 'lodash';console.log(isRegExp(/abc/)); // true
console.log(isRegExp('abc')); // false

15. isSet

检查值是否为 Set 对象。

import { isSet } from 'lodash';console.log(isSet(new Set())); // true
console.log(isSet({})); // false

16. isString

检查值是否为字符串。

import { isString } from 'lodash';console.log(isString('abc')); // true
console.log(isString(123)); // false

17. isSymbol

检查值是否为符号。

import { isSymbol } from 'lodash';console.log(isSymbol(Symbol('abc'))); // true
console.log(isSymbol('abc')); // false

18. isUndefined

检查值是否为 undefined

import { isUndefined } from 'lodash';console.log(isUndefined(undefined)); // true
console.log(isUndefined(null)); // false

19. isError

检查值是否为 Error 对象。

import { isError } from 'lodash';console.log(isError(new Error())); // true
console.log(isError('error message')); // false

20. isFinite

检查值是否为有限数值。

import { isFinite } from 'lodash';console.log(isFinite(123)); // true
console.log(isFinite(Infinity)); // false
console.log(isFinite(NaN)); // false

21. isLength

检查值是否为有效的数组长度。

import { isLength } from 'lodash';console.log(isLength(5)); // true
console.log(isLength(0)); // true
console.log(isLength(-1)); // false
console.log(isLength(1.5)); // false
console.log(isLength('5')); // false

22. isMap

检查值是否为 Map 对象。

import { isMap } from 'lodash';console.log(isMap(new Map())); // true
console.log(isMap({})); // false

23. isMatch

检查对象是否匹配指定的属性值。

import { isMatch } from 'lodash';const object = { a: 1, b: 2 };
console.log(isMatch(object, { a: 1 })); // true
console.log(isMatch(object, { a: 2 })); // false

24. isNative

检查值是否为原生函数。

import { isNative } from 'lodash';console.log(isNative(Array.prototype.push)); // true
console.log(isNative(function() {})); // false

25. isPlainObject

检查值是否为纯对象(即通过 {}new Object 创建的对象)。

import { isPlainObject } from 'lodash';console.log(isPlainObject({})); // true
console.log(isPlainObject(new Object())); // true
console.log(isPlainObject([1, 2, 3])); // false
console.log(isPlainObject(new Date())); // false

26. isTypedArray

检查值是否为类型化数组(如 Uint8ArrayInt32Array 等)。

import { isTypedArray } from 'lodash';console.log(isTypedArray(new Uint8Array())); // true
console.log(isTypedArray([])); // false

27. isWeakMap

检查值是否为 WeakMap 对象。

import { isWeakMap } from 'lodash';console.log(isWeakMap(new WeakMap())); // true
console.log(isWeakMap({})); // false

28. isWeakSet

检查值是否为 WeakSet 对象。

import { isWeakSet } from 'lodash';console.log(isWeakSet(new WeakSet())); // true
console.log(isWeakSet({})); // false

2、在项目中Lodash 中常用的函数及其功能和示例

这些函数包括 omit、pick、debounce、has、get、cloneDeep、uniqueId、merge、assign、keys、compact、difference、findIndex、includes 和 remove。

函数名称功能描述示例
omit创建一个不包含指定键的新对象omit({ a: 1, b: 2, c: 3 }, ['a', 'c'])
pick创建一个只包含指定键的新对象pick({ a: 1, b: 2, c: 3 }, ['a', 'c'])
debounce创建一个防抖函数,延迟执行直到最后一次调用后经过指定时间const debounced = debounce(console.log, 1000);
has检查对象是否有指定的路径属性has({ a: { b: 2 } }, 'a.b')
get获取对象中指定路径的值,如果路径不存在返回默认值get({ a: { b: 2 } }, 'a.b', 0)
cloneDeep创建一个对象或数组的深拷贝cloneDeep({ a: [1, 2, 3], b: { c: 4 } })
uniqueId生成一个唯一的 IDuniqueId('prefix-')
merge合并多个对象,支持嵌套对象的合并merge({ a: { b: 1 } }, { a: { c: 2 } })
assign将源对象的所有可枚举属性复制到目标对象assign({ a: 1 }, { b: 2 }, { c: 3 })
keys获取对象的所有键keys({ a: 1, b: 2, c: 3 })
compact移除数组中的假值(false、null、0、“”、undefined、NaN)compact([0, 1, false, 2, '', 3])
difference返回两个数组的差集difference([1, 2, 3], [2, 3, 4])
findIndex查找数组中满足条件的第一个元素的索引findIndex([1, 2, 3, 4], n => n > 2)
includes检查数组是否包含指定的值includes([1, 2, 3, 4], 3)
remove移除数组中满足条件的元素,并返回被移除的元素remove([1, 2, 3, 4], n => n % 2 === 0)

具体使用方法如下:

1. omit

功能描述:创建一个不包含指定键的新对象。
参数

  • object (Object):要操作的对象。
  • [paths]… (string|string[]):要省略的键或键路径。
    返回值
  • (Object):一个新的对象,不包含指定的键。

示例

const obj = { a: 1, b: 2, c: 3 };
const result = _.omit(obj, ['a', 'c']);
console.log(result); // { b: 2 }// 省略嵌套对象的键
const nestedObj = { a: 1, b: { c: 2, d: 3 } };
const result2 = _.omit(nestedObj, ['b.c']);
console.log(result2); // { a: 1, b: { d: 3 } }

实际应用
在处理表单数据时,可能需要从提交的数据中移除某些不需要的字段。

2. pick

功能描述:创建一个只包含指定键的新对象。
参数

  • object (Object):要操作的对象。
  • [paths]… (string|string[]):要保留的键或键路径。
    返回值
  • (Object):一个新的对象,只包含指定的键。

示例

const obj = { a: 1, b: 2, c: 3 };
const picked = _.pick(obj, ['a', 'c']);
console.log(picked); // { a: 1, c: 3 }// 选择嵌套对象的键
const nestedObj = { a: 1, b: { c: 2, d: 3 } };
const result2 = _.pick(nestedObj, ['b.c']);
console.log(result2); // { b: { c: 2 } }

实际应用
在处理 API 请求时,可能只需要发送部分数据字段。

3. debounce

功能描述:创建一个防抖函数,延迟执行直到最后一次调用后经过指定时间。
参数

  • func (Function):要防抖的函数。
  • wait (number):等待的时间(毫秒)。
  • [options] (Object):可选配置对象。
    • leading (boolean):是否在第一次调用时立即执行。
    • maxWait (number):最大等待时间。
      返回值
  • (Function):防抖后的函数。

示例

const debounced = _.debounce(console.log, 1000);
debounced('Hello'); // 1秒后输出 'Hello'// 配置选项
const debounced2 = _.debounce(console.log, 1000, { leading: true, maxWait: 2000 });
debounced2('Hi'); // 立即输出 'Hi'

实际应用
在处理滚动事件或输入事件时,防止频繁触发导致性能问题。

4. has

功能描述:检查对象是否有指定的路径属性。
参数

  • object (Object):要检查的对象。
  • path (string|string[]):要检查的路径。
    返回值
  • (boolean):是否存在指定路径的属性。

示例

const nestedObj = { a: { b: 2 } };
console.log(_.has(nestedObj, 'a.b')); // true
console.log(_.has(nestedObj, 'a.c')); // false

实际应用
在处理复杂对象时,确保某个路径存在再进行操作。

5. get

功能描述:获取对象中指定路径的值,如果路径不存在返回默认值。
参数

  • object (Object):要获取值的对象。
  • path (string|string[]):要获取的路径。
  • [defaultValue] (any):路径不存在时的默认值。
    返回值
  • (any):指定路径的值或默认值。

示例

const nestedObj = { a: { b: 2 } };
console.log(_.get(nestedObj, 'a.b', 0)); // 2
console.log(_.get(nestedObj, 'a.c', 0)); // 0

实际应用
在处理不确定结构的数据时,安全地获取值。

6. cloneDeep

功能描述:创建一个对象或数组的深拷贝。
参数

  • value (any):要拷贝的值。
    返回值
  • (any):深拷贝后的值。

示例

const original = { a: [1, 2, 3], b: { c: 4 } };
const copied = _.cloneDeep(original);
console.log(copied); // { a: [1, 2, 3], b: { c: 4 } }
console.log(copied === original); // false
console.log(copied.a === original.a); // false
console.log(copied.b === original.b); // false

实际应用
在处理复杂数据结构时,避免引用问题。

7. uniqueId

功能描述:生成一个唯一的 ID。
参数

  • [prefix=‘’] (string):ID 的前缀。
    返回值
  • (string):唯一的 ID。

示例

console.log(_.uniqueId('prefix-')); // prefix-1
console.log(_.uniqueId('prefix-')); // prefix-2

实际应用
在生成唯一标识符时,确保每个 ID 都是唯一的。

8. merge

功能描述:合并多个对象,支持嵌套对象的合并。
参数

  • object (Object):目标对象。
  • [sources]… (Object):源对象。
    返回值
  • (Object):合并后的对象。

示例

const merged = _.merge({ a: { b: 1 } }, { a: { c: 2 } });
console.log(merged); // { a: { b: 1, c: 2 } }

实际应用
在处理配置文件或状态管理时,合并多个对象。

9. assign

功能描述:将源对象的所有可枚举属性复制到目标对象。
参数

  • object (Object):目标对象。
  • [sources]… (Object):源对象。
    返回值
  • (Object):合并后的对象。

示例

const assigned = _.assign({ a: 1 }, { b: 2 }, { c: 3 });
console.log(assigned); // { a: 1, b: 2, c: 3 }

实际应用
在处理简单对象合并时,快速复制属性。

10. keys

功能描述:获取对象的所有键。
参数

  • object (Object):要获取键的对象。
    返回值
  • (Array):对象的所有键组成的数组。

示例

const keysArray = _.keys({ a: 1, b: 2, c: 3 });
console.log(keysArray); // ['a', 'b', 'c']

实际应用
在遍历对象的键时,获取所有键的列表。

11. compact

功能描述:移除数组中的假值(false、null、0、“”、undefined、NaN)。
参数

  • array (Array):要操作的数组。
    返回值
  • (Array):移除假值后的数组。

示例

const compacted = _.compact([0, 1, false, 2, '', 3]);
console.log(compacted); // [1, 2, 3]

实际应用
在处理数组时,过滤掉无效的值。

12. difference

功能描述:返回两个数组的差集。
参数

  • array (Array):第一个数组。
  • [values]… (Array):其他数组。
    返回值
  • (Array):差集数组。

示例

const diff = _.difference([1, 2, 3], [2, 3, 4]);
console.log(diff); // [1]

实际应用
在比较两个数组时,找出独有的元素。

13. findIndex

功能描述:查找数组中满足条件的第一个元素的索引。
参数

  • array (Array):要操作的数组。
  • [predicate=_.identity] (Function|Object|string):用于确定哪些元素满足条件的断言函数、对象或字符串。
  • [fromIndex=0] (number):开始搜索的索引。
    返回值
  • (number):满足条件的第一个元素的索引,如果未找到返回 -1。

示例

const index = _.findIndex([1, 2, 3, 4], n => n > 2);
console.log(index); // 2

实际应用
在数组中查找特定元素的位置。

14. includes

功能描述:检查数组是否包含指定的值。
参数

  • collection (Array|Object):要检查的集合。
  • value (any):要检查的值。
  • [fromIndex=0] (number):开始检查的索引。
    返回值
  • (boolean):是否包含指定的值。

示例

console.log(_.includes([1, 2, 3, 4], 3)); // true
console.log(_.includes([1, 2, 3, 4], 5)); // false

实际应用
在数组或对象中检查某个值是否存在。

15. remove

功能描述:移除数组中满足条件的元素,并返回被移除的元素。
参数

  • array (Array):要操作的数组。
  • [predicate=_.identity] (Function|Object|string):用于确定哪些元素应该被移除的断言函数、对象或字符串。
    返回值
  • (Array):被移除的元素组成的数组。

示例

const array = [1, 2, 3, 4];
const removed = _.remove(array, n => n % 2 === 0);
console.log(removed); // [2, 4]
console.log(array); // [1, 3]

实际应用
在处理数组时,根据条件移除元素。


总结

以上是 Lodash 中一些常用函数的详细解释和示例代码。这些函数可以帮助你在处理数据时更加高效和简洁。如果你有任何进一步的问题或需要更多的示例,请随时提问!


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

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

相关文章

万字长文解读深度学习——卷积神经网络CNN

推荐阅读: 卷积神经网络(CNN)详细介绍及其原理详解 CNN笔记:通俗理解卷积神经网络 文章目录 🌺深度学习面试八股汇总🌺主要组件输入层卷积层 (Convolutional Layer)批归一化层(Batch Normalizat…

100+SCI科研绘图系列教程(R和python)

科研绘图系列:箱线图加百分比点图展示组间差异-CSDN博客科研绘图系列:箱线图加蜜蜂图展示组间数据分布-CSDN博客科研绘图系列:小提琴图和双侧小提琴图展示组间差异-CSDN博客科研绘图系列:组间差异的STAMP图的ggplot2实现-CSDN博客…

【在Linux世界中追寻伟大的One Piece】多路转接epoll

目录 1 -> I/O多路转接之poll 1.1 -> poll函数接口 1.2 -> poll的优点 1.3 -> poll的缺点 1.4 -> poll示例 1.4.1 -> 使用poll监控标准输入 2 -> I/O多路转接之epoll 2.1 -> 初识epoll 2.2 -> epoll的相关系统调用 2.2.1 -> epoll_cre…

招聘app开发,人才招聘、求职首要方式

随着互联网的快速发展,各种线上应用成为了大众生活中不可或缺的一部分,不管是购物、娱乐、找工作等都可以通过手机应用进行。因此,对于企业说,线上招聘app至关重要,能够快速帮助企业找到合适的人才。企业直接与求职者交…

学习方法——看差的书籍

CSAPP证明从1中午2点到下午3:40,但是还是只是推理证明而已,但是想起来了课上老师讲的东西了 还可以知道补码运算的大前提知识!!! 但是最好不要一下学这个一下子学哪个,学哪一个都不能尽情投入。…

【人工智能】Transformers之Pipeline(二十三):文档视觉问答(document-question-answering)

​​​​​​​ 目录 一、引言 二、文档问答(document-question-answering) 2.1 概述 2.2 impira/layoutlm-document-qa 2.2.1 LayoutLM v1 2.2.2 LayoutLM v2 2.2.3 LayoutXLM 2.2.4 LayoutLM v3 2.3 pipeline参数 2.3.1 pipeline对象实例化…

Python酷库之旅-第三方库Pandas(206)

目录 一、用法精讲 961、pandas.IntervalIndex.mid属性 961-1、语法 961-2、参数 961-3、功能 961-4、返回值 961-5、说明 961-6、用法 961-6-1、数据准备 961-6-2、代码示例 961-6-3、结果输出 962、pandas.IntervalIndex.length属性 962-1、语法 962-2、参数 …

【论文阅读】利用SEM二维图像表征黏土矿物三维结构

导言 在油气储层研究中,黏土矿物对流体流动的影响需要在微观尺度上理解,但传统的二维SEM图像难以完整地表征三维孔隙结构。常规的三维成像技术如FIB-SEM(聚焦离子束扫描电子显微镜)虽然可以获取高精度的3D图像,但成本…

前端入门一之ES6--面向对象、够着函数和原型、继承、ES5新增方法、函数进阶、严格模式、高阶函数、闭包

前言 JS是前端三件套之一,也是核心,本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点,这篇是ES6;这篇文章是本人大一学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 文章目录 JS高级 ES61、面向对象1.1…

数据安全、信息安全、网络安全区别与联系

关键字: 信息安全 数据安全 网络安全 [导读] 在 “互联网 ” 被广泛提及的今天,安全问题也越来越多的受到人们关注,然而很多人对于 “信息安全”、“数据安全”、“网络安全” 的概念并不是很清楚。我们汇总了官方机构给这三者的定义&#…

Linux——简单认识vim、gcc以及make/Makefile

前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 1、vim操作: 默认打开vim时,vim处于命令模式。(在其他模式中,Esc就能够返回命令模式) 常用的命令有: n gg:跳转到n行&…

Java反序列化之CommonsCollections2链的学习

一、前言 Apache Commons Collections 是一个著名的辅助开发库,包含了一些Java中没有的数据结构和辅助方法,不过随着Java 9 以后的版本中原生库功能的丰富,以及反序列化漏洞的影响,它也在逐渐被升级或替代。 在2015年底的common…

前端web

题目&#xff1a;制作带有下拉悬停菜单的导航栏 效果图 一、先制作标签 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div class…

【大数据学习 | kafka高级部分】kafka中的选举机制

controller的选举 首先第一个选举就是借助于zookeeper的controller的选举 第一个就是controller的选举&#xff0c;这个选举是借助于zookeeper的独享锁实现的&#xff0c;先启动的broker会在zookeeper的/contoller节点上面增加一个broker信息&#xff0c;谁创建成功了谁就是主…

Android 开发指南:初学者入门

Android 是全球最受欢迎的移动操作系统之一&#xff0c;为开发者提供了丰富的工具和资源来创建各种类型的应用程序。本文将为你提供一个全面的入门指南&#xff0c;帮助你从零开始学习 Android 开发。 目录 1. 了解 Android 平台[1]2. 设置开发环境[2]3. 学习基础知识[3]4. 创…

漏洞挖掘 | 某医院小程序支付漏洞+越权

漏洞挖掘 | 某医院小程序支付漏洞越权 登陆后点击个人信息&#xff0c;抓包&#xff0c;放到repeter模块 修改strUserID参数可以越权查看别人信息 放intruder模块可以跑数据&#xff0c;这里有几万信息泄露 回到首页&#xff0c;点击医生咨询功能点 随便选一个需要付费的医…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数&#xff0c;它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形&#xff0c;特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型&#xff1a;BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

基于Python的膳食健康系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

头歌网络安全(11.12)

头歌禁止复制解决 必须先下篡改猴&#xff01;&#xff01;&#xff01;&#xff01; 头歌复制助手 Educoder Copy Helperhttps://scriptcat.org/zh-CN/script-show-page/1860 Java生成验证码 第1关&#xff1a;使用Servlet生成验证码 任务描述 本关任务&#xff1a;使用se…

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…