当前位置: 首页 > news >正文

JavaScript 中 arguments、类数组与数组的深入解析


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: 前端

文章目录

  • 💯前言
  • 💯什么是 `arguments` 对象
    • 2.1 `arguments` 的定义
    • 2.2 `arguments` 的特性
    • 2.3 使用场景
  • 💯深入了解 `arguments` 的结构
    • 3.1 `arguments` 的内部结构
      • `arguments` 的关键属性
    • 3.2 类数组 VS 真正的数组
      • 什么是类数组?
      • 类数组和数组的主要区别
  • 💯如何将类数组转换为数组?
    • 4.1 使用 `Array.from`
    • 4.2 使用扩展运算符(`...`)
    • 4.3 使用 `Array.prototype.slice`
  • 💯箭头函数与 `arguments`
  • 💯现代 JavaScript 中的替代方案:剩余参数
    • 6.1 剩余参数语法
    • 6.2 优势
  • 💯总结与最佳实践
    • 7.1 使用场景建议
    • 7.2 转换类数组的首选方法
    • 7.3 常见误区
  • 💯小结


在这里插入图片描述


💯前言

  • JavaScript 是一种灵活多变的编程语言,其中有一个特别的对象叫作 arguments,在非箭头函数中非常有用。它是一个类数组对象,用于捕获调用时的所有参数。本文将从实际使用的角度,详细分析 arguments 对象、类数组和数组的区别,并通过示例讲解如何在应用中高效地使用这些特性。理解 arguments 对象和类数组的概念对 JavaScript 开发者来说至关重要,因为这可以帮助更灵活地处理函数传参问题,从而编写出更加健壮简洁的代码。
    JavaScript
    在这里插入图片描述

💯什么是 arguments 对象

在这里插入图片描述

arguments 是一个特殊的对象,在非箭头函数的作用域中自动生成。它是 JavaScript 用来捕获调用函数时传递的所有参数的一个机制。


2.1 arguments 的定义

  • arguments 是一个类数组对象,包含了调用函数时传递给函数的所有参数的值。它在函数调用时自动生成,无需手动声明。通过 arguments,我们可以访问到函数传递的所有参数,即使这些参数没有在函数的形参列表中明确定义。这种特性在处理未知数量参数时非常有用,尤其是在 JavaScript 的早期版本中,arguments 是唯一的办法来处理可变数量的参数。
    在这里插入图片描述

示例:

function example() {console.log(arguments); // 输出 arguments 对象
}example(1, 2, 3);
// 控制台输出:
// [Arguments] { '0': 1, '1': 2, '2': 3 }

2.2 arguments 的特性

在这里插入图片描述

  • 类数组arguments 具有 length 属性,用于表示参数的数量,可以通过索引访问每个参数值。虽然它看起来像一个数组,但实际上它是一个对象。
  • 只读属性:在大多数环境中,arguments 的值是只读的,不能随意修改,否则可能会导致不可预期的行为。
  • 不是真正的数组:它虽然看起来像数组,但并不是真正的数组,无法直接使用数组的方法(例如 pushmap 等)。如果需要使用这些方法,我们通常需要将 arguments 转换为真正的数组。
  • 存在于普通函数中arguments 仅在普通函数中有效,在箭头函数中不存在。这是因为箭头函数没有自己的 arguments 对象,它们会从包含它们的父级作用域中继承 arguments
  • 性能警告:在现代 JavaScript 中,arguments 对象已经逐渐被剩余参数语法(...rest)取代,因为后者更加高效和直观。尤其是在涉及到复杂操作和高性能需求的情况下,剩余参数的表现通常要优于 arguments

2.3 使用场景

在这里插入图片描述

arguments 在以下情况下非常有用:

  1. 处理未知数量的参数
    在不知道函数调用时会传入多少个参数的情况下,arguments 提供了一种方法来动态访问所有参数。这在构建通用工具函数或处理多个输入值时非常有帮助。
    在这里插入图片描述

    示例:

    function sum() {let total = 0;for (let i = 0; i < arguments.length; i++) {total += arguments[i];}return total;
    }console.log(sum(1, 2, 3, 4)); // 输出 10
    
  2. 实现灵活的参数接口
    在没有使用 ES6 剩余参数语法的旧代码中,arguments 是处理灵活参数的主要工具。这些代码通常需要处理不固定数量的参数,并且不方便直接修改函数定义,此时 arguments 显得尤为重要。

  3. 函数重载实现
    在一些场景下,可能会需要根据传入参数的不同类型或数量来执行不同的逻辑。虽然 JavaScript 没有原生的函数重载,但可以通过 arguments 对象来模拟这种效果。
    在这里插入图片描述

    示例:

    function example() {if (arguments.length === 0) {console.log('没有传入参数');} else {console.log('传入了', arguments.length, '个参数');}
    }example(); // 输出: 没有传入参数
    example(1, 2); // 输出: 传入了 2 个参数
    

💯深入了解 arguments 的结构

在这里插入图片描述


3.1 arguments 的内部结构

  • 在控制台中打印 arguments 对象,会发现它是一个带有特殊属性的对象:
    在这里插入图片描述
function test() {console.log(arguments);
}test(1, 2, 3);
// 输出:
/*
Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
*/

arguments 的关键属性

在这里插入图片描述

  • 索引属性
    • 存储每个参数值,可以通过 arguments[0] 访问第一个参数,arguments[1] 访问第二个参数,以此类推。
  • length 属性
    • 表示传入的参数数量,方便我们对参数进行遍历。
  • callee 属性
    • 指向当前函数本身(严格模式下禁用),在某些场景下可能会用来递归调用。
  • Symbol.iterator 属性
    • 允许使用 for...of 循环进行遍历 arguments 对象。这使得 arguments 可以像数组一样被迭代,尽管它不是真正的数组。

3.2 类数组 VS 真正的数组

在这里插入图片描述


什么是类数组?

在这里插入图片描述

类数组是一个具有类似数组结构的对象,它满足以下条件:

  • 拥有按索引存储的数据。
  • 拥有 length 属性。
  • 不能直接使用数组的原型方法(例如 pushmap 等)。

类数组对象是广泛存在于 JavaScript 中的数据结构,常见的类数组对象包括:

常见的类数组对象:

  1. arguments 对象:捕获函数调用时传入的所有参数。
  2. NodeList(Document Object Model 操作中的节点列表,用于包含由选择器或其他查询方法返回的元素集合)。
  3. HTMLCollection(通过 getElementsByClassName 返回的集合)。

类数组和数组的主要区别

在这里插入图片描述

特性类数组数组
类型ObjectArray
检测方式typeof 返回 objectArray.isArray() 返回 true
原型方法无法直接使用数组方法可以使用数组方法
转换为数组的方式需要手动转换无需转换
遍历方式可通过索引访问支持所有数组遍历方法

类数组对象通常需要经过转换才能使用数组的方法。尽管它们在某些情况下具有数组的特性,但直接调用如 map()forEach() 这样的数组方法会导致错误,因为它们并不继承自 Array 的原型链。


💯如何将类数组转换为数组?

在这里插入图片描述

在实际开发中,类数组常常需要转换为真正的数组以使用数组的强大功能。以下是常用的转换方法:


4.1 使用 Array.from

在这里插入图片描述

  • Array.from 是一个将类数组或可迭代对象转换为数组的内置方法。
    在这里插入图片描述
function test() {const args = Array.from(arguments);console.log(args.map(x => x * 2)); // [2, 4, 6]
}test(1, 2, 3);

4.2 使用扩展运算符(...

  • 扩展运算符是 ES6 引入的功能,可以快速地将类数组展开为数组。
    在这里插入图片描述
function test() {const args = [...arguments];console.log(args.map(x => x * 2)); // [2, 4, 6]
}test(1, 2, 3);

4.3 使用 Array.prototype.slice

  • 在 ES5 中,slice 方法常用于将类数组转换为数组。
    在这里插入图片描述
function test() {const args = Array.prototype.slice.call(arguments);console.log(args.map(x => x * 2)); // [2, 4, 6]
}test(1, 2, 3);

这些方法的核心目的是将类数组对象转换为一个真正的数组,以便我们能够使用数组的各种方法(如 mapfilter 等),从而更方便地进行数据操作。


💯箭头函数与 arguments

  • 在箭头函数中,arguments 对象不存在。如果需要捕获参数,必须使用剩余参数。
    在这里插入图片描述
const example = (...args) => {console.log(args); // [1, 2, 3]
};example(1, 2, 3);

箭头函数没有自己的 arguments 对象,因为它们的作用域继承自包含它们的上下文。这种特性使得箭头函数更适合在保持作用域一致的回调函数中使用。


💯现代 JavaScript 中的替代方案:剩余参数

在这里插入图片描述


6.1 剩余参数语法

  • 剩余参数允许将不确定数量的参数捕获为数组。
    在这里插入图片描述
function sum(...args) {return args.reduce((total, current) => total + current, 0);
}console.log(sum(1, 2, 3, 4)); // 输出 10

剩余参数的引入大大简化了函数参数的处理,因为它能够将所有的传入参数收集到一个数组中,避免了手动转换类数组的繁琐操作。


6.2 优势

在这里插入图片描述

  1. 返回真正的数组
    • 不需要额外的转换操作。
  2. 简洁明亮
    • 代码更加直观和易读。
  3. 更好的可维护性
    • 剩余参数的代码结构更简洁、逻辑更清晰,便于团队协作和代码审查。

💯总结与最佳实践

在这里插入图片描述


7.1 使用场景建议

在这里插入图片描述

  • 如果需要兼容旧版 JavaScript,且需要访问所有参数,仍可以使用 arguments
  • 在现代开发中,优先使用剩余参数替代 arguments,以简化代码逻辑。剩余参数的灵活性使其能够适应更多的场景,尤其是在函数需要处理可变数量参数时表现更优。

7.2 转换类数组的首选方法

在这里插入图片描述

  • 使用 Array.from 或扩展运算符(...)来将类数组对象转换为数组。这些方法能够更高效、更直观地完成转换,并且代码的可读性更好。

7.3 常见误区

在这里插入图片描述

  1. 误以为 arguments 是数组

    • 需要明确 arguments 是类数组,而非真正的数组。
    • 若直接调用数组方法会导致报错。例如,尝试对 arguments 调用 map() 方法会导致 TypeError
  2. 在箭头函数中使用 arguments

    • 箭头函数不支持 arguments,需要通过剩余参数捕获参数。因为箭头函数的 this 和作用域继承自父级上下文,它们不生成自己的 arguments 对象。

💯小结

  • 在这里插入图片描述
    通过这篇文章,我们深入探讨了 JavaScript 中 arguments 对象的定义特性、应用场景,以及类数组与数组的区别,并结合现代语法如剩余参数对其进行了优化替代的说明。理解这些内容将帮助我们在日常开发中更高效地处理函数参数问题,同时编写出更简洁易于维护的代码。随着 JavaScript 生态系统的不断演进,掌握这些特性不仅能提升开发效率,还能让我们编写出更具现代化风格、更符合最佳实践代码

在这里插入图片描述


相关文章:

JavaScript 中 arguments、类数组与数组的深入解析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;什么是 arguments 对象2.1 arguments 的定义2.2 arguments 的特性2.3 使用场景 &#x1f4af;深入了解 arguments 的结构3.1 arguments 的内部结构arguments 的关键属性…...

【java-Neo4j 5开发入门篇】-最新Java开发Neo4j

系列文章目录 前言 上一篇文章讲解了Neo4j的基本使用&#xff0c;本篇文章对Java操作Neo4j进行入门级别的阐述&#xff0c;方便读者快速上手对Neo4j的开发。 一、开发环境与代码 1.docker 部署Neo4j #这里使用docker部署Neo4j,需要镜像加速的需要自行配置 docker run --name…...

摄影:相机控色

摄影&#xff1a;相机控色 白平衡&#xff08;White Balance&#xff09;白平衡的作用&#xff1a; 白平衡的使用环境色温下相机色温下总结 白平衡偏移与包围白平衡包围 影调 白平衡&#xff08;White Balance&#xff09; 人眼看到的白色&#xff1a;会自动适应环境光线。 相…...

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…...

数字图像处理(2):Verilog基础语法

&#xff08;1&#xff09;Verilog常见数据类型&#xff1a; reg型、wire型、integer型、parameter型 &#xff08;2&#xff09;Verilog 常见进制&#xff1a;二进制&#xff08;b或B&#xff09;、十进制&#xff08;d或D&#xff09;、八进制&#xff08;o或O&#xff09;、…...

大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务?

大公司如何实现打印机共享的&#xff1f;如何对打印机进行管控或者工号登录后进行打印&#xff1f;异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务&#xff1f; 如果在局域网内&#xff0c;可以不需要进行二次开发&#xff0c;通过对打印机进…...

解决前端页面报错:Not allowed to load local resource

在前后端分离项目中&#xff0c;在前端页面里使用file://的绝对路径访问本地图片&#xff0c;在加载图片的 时候会报出Not allowed to load local resource 的错误。 这是因为浏览器出于安全因素&#xff0c;禁止通过绝对路径访问图片&#xff0c;需要通过虚拟路径进行访问。 …...

Qt 实现网络数据报文大小端数据的收发

1.大小端数据简介 大小端&#xff08;Endianness&#xff09;是计算机体系结构的一个术语&#xff0c;它描述了多字节数据在内存中的存储顺序。以下是大小端的定义和它们的特点&#xff1a; 大端&#xff08;Big-Endian&#xff09; 在大端模式中&#xff0c;一个字的最高有效…...

2024年11月21日Github流行趋势

项目名称&#xff1a;twenty 项目维护者&#xff1a;charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael项目介绍&#xff1a;正在构建一个由社区支持的现代化Salesforce替代品。项目star数&#xff1a;21,798项目fork数&#xff1a;2,347 项目名称&#xff1a;p…...

Java的方法、基本和引用数据类型

个人的黑马程序员java笔记 目录 方法 例&#xff1a;方法定义和调用 方法的重载 对于byte, short, int, long类型 方法的内存 基本数据类型 引用数据类型 方法的值的传递的内存原理 方法 方法&#xff08;method&#xff09;是程序中最小的执行单元格式 方法定义&a…...

Spark分布式计算中Shuffle Read 和 Shuffle Write的职责和区别

在 Spark 的分布式计算中&#xff0c;Shuffle Read 和 Shuffle Write 是两个与数据重新分区和分发相关的重要阶段。它们的主要职责和区别如下&#xff1a; 1. Shuffle Write Shuffle Write 发生在上游的任务执行阶段&#xff0c;其作用是&#xff1a; 分区数据准备&#xff1…...

【成品文章+四小问代码更新】2024亚太杯国际赛B题基于有限差分格式的空调形状优化模型

这里仅展示部分内容&#xff0c;完整内容获取在文末&#xff01; 基于有限差分格式的空调形状优化模型 摘 要 随着科技进步&#xff0c;多功能环境调节设备成为市场趋势&#xff0c;集成了空调、加湿器和空气 净化器功能的三合一设备能提供更舒适健康的室内环境。我们需要分析…...

实验三:构建园区网(静态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1&#xff1a;完成网络部署 2、任务 2&#xff1a;设计全网 IP 地址 3、任务 3&#xff1a;实现全网各主机之间的互访 六、实验步骤 1、在 eNSP 中部署网络 2、配置各主机 IP …...

MySQL 三大日志详解

在 MySQL 数据库中&#xff0c;binlog&#xff08;二进制日志&#xff09;、redo log&#xff08;重做日志&#xff09;和 undo log&#xff08;回滚日志&#xff09;起着至关重要的作用。它们共同保障了数据库的高可用性、数据一致性和事务的可靠性。下面将对这三大日志进行详…...

vscode使用ssh配置docker容器环境

1 创建容器&#xff0c;并映射主机和容器的指定ssh服务端口 2 进入容器 docker exec -it <容器ID> /bin/bash 3在容器中安装ssh服务 apt-get update apt-get install openssh-server 接着修改ssh文件信息,将容器的10008端口暴露出来允许root用户使用ssh登录 vim /…...

Python设计模式详解之10 —— 外观模式

引言 Facade设计模式&#xff08;外观模式&#xff09;是一种软件设计模式&#xff0c;它提供了一个统一的接口来访问子系统中的一组接口。Facade模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。当一个系统的内部实现非常复杂&#xff0c;或者需要与…...

[服务器] 腾讯云服务器免费体验,成功部署网站

文章目录 概要整体架构流程概要 腾讯云服务器免费体验一个月。 整体架构流程 腾讯云服务器体验一个月, 选择预装 CentOS 7.5 首要最重要的是: 添加阿里云镜像。 不然国外源速度慢, 且容易失败。 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/li…...

低速接口项目之串口Uart开发(四)——UART串口实现FPGA内部AXILITE寄存器的读写控制

本节目录 一、设计背景 二、设计思路 三、逻辑设计框架 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计背景 通常&#xff0c;芯片手册或者IP都会提供一系列的用户寄存器以及相关的定义&#xff0c;用于软件开发人员进行控制底层硬件来调试&#xff0c;或封装…...

【Datawhale组队学习】模型减肥秘籍:模型压缩技术4——神经网络架构搜索

神经网络架构搜索是通过自动化方法来设计神经网络架构的一种技术&#xff0c;与传统手工设计网络结构相比&#xff0c;NAS能够在大量可能的架构中进行搜索&#xff0c;找到最优的神经网络架构&#xff0c;从而减少人工调参和设计的时间。学习这章时&#xff0c;重点在于理解NAS…...

用el-scrollbar实现滚动条,拖动滚动条可以滚动,但是通过鼠标滑轮却无效

问题&#xff1a; 用elementplus实现的滚动条的页面中&#xff0c;滑动滚动条可以滚动&#xff0c;但是通过鼠标滑轮却无效&#xff0c;鼠标没有问题。 解决&#xff1a; 在开发者工具中&#xff0c; 元素->时间监听器中发现当我移除网页中祖先元素的滚动事件&#xff0c;该…...

windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...

开发环境&#xff1a;windows10 qt5.14&#xff0c; 编译器msvc2017x64&#xff0c;CMake3.30&#xff1b; 现象&#xff1a; CMakeList文件里&#xff0c;如有find_package(Qt5 COMPONENTS Widgets REQUIRED) target_link_libraries(dis_lib PRIVATE Qt5::Widgets) 用CMak…...

windows实现VNC连接ubuntu22.04服务器

最近弄了一个700块钱的mini主机&#xff0c;刷了ubuntu22.04系统&#xff0c;然后想要在笔记本上通过VNC连接&#xff0c;这样就有了一个linux的开发环境。最后实现的过程为&#xff1a; 安装vnc服务器 安装 VNC 服务器软件&#xff1a; sudo apt update sudo apt install t…...

SQL注入--联合注入--理论

什么是SQL注入&#xff1f; SQL注入&#xff08;SQL Injection&#xff09;是一种常见的Web安全漏洞。 形成的主要原因是web应用程序在接收相关数据参数时未做好过滤&#xff0c;将其直接带入到数据库中查询&#xff0c;导致攻击者可以拼接执行构造的SQL语句&#xff0c;从而获…...

LaTeX 利用注销 ccmap 宏包实现降重功能

在中文LaTeX中&#xff0c;ccmap 宏包的主要作用是支持复制和粘贴时正确处理中文字符的编码。它的功能对于生成的PDF文档尤其有用&#xff0c;使得PDF中的中文字符在被复制到其他地方时能够以正确的编码显示&#xff0c;而不是乱码或其他不正确的字符。 以下是ccmap的详细功能…...

NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能

在现代社会中&#xff0c;加油站作为重要的能源供应点&#xff0c;面临着安全监管与风险管理的双重挑战。为应对这些问题&#xff0c;安防监控平台EasyCVR推出了一套全面的加油站监控方案。该方案结合了智能分析网关V4的先进识别技术和EasyCVR视频监控平台的强大监控功能&#…...

经验笔记:远端仓库和本地仓库之间的连接(以Gitee为例)

经验笔记&#xff1a;远端仓库和本地仓库之间的连接 方法一&#xff1a;先创建远端仓库&#xff0c;再克隆到本地 创建远端仓库 登录到你的Git托管平台&#xff08;如Gitee、GitHub、GitLab、Bitbucket等&#xff09;。点击“New Repository”或类似按钮&#xff0c;创建一个新…...

趋势洞察|AI 能否带动裸金属 K8s 强势崛起?

随着容器技术的不断成熟&#xff0c;不少企业在开展私有化容器平台建设时&#xff0c;首要考虑的问题就是容器的部署环境——是采用虚拟机还是物理机运行容器&#xff1f;在往期“虚拟化 vs. 裸金属*”系列文章中&#xff0c;我们分别对比了容器部署在虚拟化平台和物理机上的架…...

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言&#xff0c;一个记录对应的指标值的绝对值&#xff0c;肯定落在所有指标值的绝对值的最小值和最大值构成的区间内&#xff0c;根据一定的算法&#x…...

Cesium的ClearCommand的流程

ClearCommand是在每帧渲染前可以将显存的一些状态置为初始值&#xff0c;就如同把擦黑板。当然也包括在绘制过程中擦掉部分的数据&#xff0c;就如同画家在开始绘制的时候会画导览线&#xff08;如透视线&#xff09;&#xff0c;轮廓出来后这些导览线就会被擦除。 我画了一个…...

DBeaver错误:Public Key Retrieval is not allowed

问题原因 MySQL 8.0 默认使用 caching_sha2_password 认证插件&#xff0c;并要求客户端能够使用 RSA 公钥进行加密操作。如果客户端无法正确处理 RSA 公钥检索&#xff0c;就会触发这个错误。 解决方案 右键编辑连接-连接设置-属性驱动-修改allowPublicKeyRetrieval属性的值…...

slice介绍slice查看器

Android Jetpack架构组件(十)之Slices - 阅读清单 - 腾讯云开发者社区-腾讯云 slice 查看器apk 用adb intall 安装 Releases android/user-interface-samples GitHubMultiple samples showing the best practices in the user interface on Android. - Releases android/u…...

Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)(很详细)

我试了似乎不支持vue3 原文链接&#xff1a;Vue移动端网页&#xff08;H5&#xff09;预览pdf文件&#xff08;pdfh5和vue-pdf&#xff09;-阿里云开发者社区...

缓存工具类编写

缓存工具类编写 一般操作 在外面日常开发中&#xff0c;经常会有为了减少数据库压力&#xff0c;而将数据保存到缓存中并设置一个过期时间的操作。日常代码如下&#xff1a; Autowired private RedisTemplate<String, String> redisTemplate;public Object queryDataW…...

基于Java Springboot高校会议室预订管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…...

redis-击穿、穿透、雪崩

击穿、穿透、雪崩经常听人说吧&#xff1f; 那他到底是啥呢&#xff1f;无非就是在有缓存层的情况下&#xff0c;对各种绕过缓存层从而直接落到了DB上的情况进行的分类。 概念性的东西大概如下&#xff0c;我是记不住&#xff0c;后期具体使用与规避这些问题才是大事&#xff…...

javascrip页面交互

元素的三大系列 offset系列 offset初相识 offset系列属性 作用 element.offsetParent 返回作为该元素带有定位的父级元素&#xff0c;如果父级没有定位&#xff0c;则返回body element.offsetTop 返回元素相对于有定位父元素上方的偏移量 element.offsetLeft 返回元素…...

PAL(Program-Aided Language Model)

PAL&#xff08;Program-Aided Language Model&#xff09;是一种结合生成式语言模型&#xff08;如 GPT&#xff09;和程序执行能力的技术框架。它的核心思想是通过让语言模型生成代码或程序来解决复杂任务&#xff0c;程序执行的结果反过来增强语言模型的输出准确性和逻辑性。…...

Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制

基于Altium Designer 23学习版&#xff0c;四层板智能小车PCB 更多AD学习笔记&#xff1a;Altium Designer学习笔记 1-5 工程创建_元件库创建 目录 6、光耦及二极管元件库模型创建 7、元件库模型的调用 二、原理图绘制及编译检查 8、元件的放置 9、器件的复制及对齐 10、…...

Qt-多元素控件

Qt中的多元素控件 Qt提供的多元素控件有&#xff1a; 这里的多元素控件都是两两一对的。 xxWidget和xxView的一个比较简单的理解就是&#xff1a; xxView是更底层的实现&#xff0c; xxWidget是基于xxView封装来的。 可以说&#xff0c;xxView使用起来比较麻烦&#xff0c;但…...

网络安全-web架构-nginx配置

1. nginx访问&#xff1a; 访问的是index.html&#xff0c; 访问ip访问的资源就是在/usr/share/nginx/html中&#xff1b; 当nginx不认识&#xff0c;浏览器认识的话&#xff0c;浏览器会自动渲染。 当nginx认识&#xff0c;浏览器不认识的话&#xff0c;浏览器会把它加载成…...

CPU性能优化--微操作

x86 架构处理器吧复杂的CISC指令转为简单的RISC微操作。这样做最大的优势是微操作可以乱序执行&#xff0c;一条简单的相加指令--比如ADD&#xff0c;EAX, EBX&#xff0c;只产生一个微操作&#xff0c;而很多复杂指令--比如ADD, EAX 可能会产生两个微操作&#xff0c;一个将数…...

开源许可协议

何同学推动了开源协议的认识&#xff0c;功不可没&#xff0c;第一次对开源有了清晰的认识&#xff0c;最宽松的MIT开源协议 源自OSC开源社区&#xff1a;何同学使用开源软件“翻车”&#xff0c;都别吵了&#xff01;扯什么违反MIT...

React核心功能详解(一)

React是一个流行的JavaScript库&#xff0c;用于构建用户界面。其高级核心功能涵盖了多个方面&#xff0c;以下是对这些功能的详解&#xff1a; 一、组件化与模块化 组件化开发&#xff1a;React提倡将用户界面拆分成多个独立的组件&#xff0c;每个组件负责管理自己的状态和…...

在vue中,根据后端接口返回的文件流实现word文件弹窗预览

需求 弹窗预览word文件&#xff0c;因浏览器无法直接根据blob路径直接预览word文件&#xff0c;所以需要利用插件实现。 解决方案 利用docx-preview实现word文件弹窗预览&#xff0c;以node版本16.21.3和docx-preview版本0.1.8为例 具体实现步骤 1、安装docx-preview插件 …...

基于Spring Boot的同城宠物照看系统的设计与实现

摘 要 科学技术日新月异&#xff0c;人们的生活都发生了翻天覆地的变化&#xff0c;同城宠物照看系统当然也不例外。过去的信息管理都使用传统的方式实行&#xff0c;既花费了时间&#xff0c;又浪费了精力。在信息如此发达的今天&#xff0c;我们可以通过网络这个媒介&#x…...

Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三)

Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作&#xff08;三&#xff09; py2neo 删除 1、连接数据库 from py2neo import Graph graph Graph("bolt://xx.xx.xx.xx:7687", auth(user, pwd), nameneo4j)2、删除节点 # 删除单个节点 node graph.node…...

二分基本实现

模板 一般题目看到&#xff0c;最大&#xff0c;最小时优先考虑二分 //将区间分为 [l,mid-1] int erfen1(int l,int r) {while(l<r){int mid(lr1)/2;if(check())lmid;elsermid-1;}return l; }//将区间分为 [mid1,r] int erfen2(int l,int r) {while(l<r){int mid(lr)/2…...

数据结构中的随机抽取和顺序存取

在数据结构领域&#xff0c;随机存取与顺序存取是两种基本的存储模式。这两种模式在很大程度上决定了数据的组织与访问方式&#xff0c;从而对数据处理效率和存储空间的利用效果产生重要影响。本文将进一步探讨这两种存储模式的特点及其差异。 随机存取 随机存取&#xff0c;…...

大数据新视界 -- 大数据大厂之 Impala 性能优化:跨数据中心环境下的挑战与对策(上)(27 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

GPT中转站技术架构

本文介绍阿波罗AI中转站&#xff08;https://api.ablai.top/&#xff09;的技术架构&#xff0c;该中转API的技术架构采用了分布式架构、智能调度和API中转等技术&#xff0c;确保了全球范围内的高效访问和稳定运行。以下是对该技术架构的详细分析&#xff1a; 分布式架构 分…...