前端开发中的常用工具函数(九)
二十三、at() 方法通过索引(支持负数倒数)获取数组或字符串中的元素在前端日常开发中我们经常需要获取数组或字符串中的特定元素。如果是要获取最后一个元素传统写法总是离不开arr[arr.length - 1]或者arr.slice(-1)[0]。这种写法不仅冗长而且可读性一般。为了解决这个痛点ES2022 引入了一个非常实用的函数工具at()方法。1. 基本语法at()方法接收一个整数值作为参数返回该索引对应的数组或字符串元素。它最大的亮点在于支持负数索引。语法结构// 数组 Array.prototype.at(index) // 字符串 String.prototype.at(index) // TypedArray TypedArray.prototype.at(index)参数说明index可选要返回的元素的索引从零开始。如果传入负数则会从数组/字符串的末尾开始倒数。即-1代表最后一个元素-2代表倒数第二个元素依此类推。返回值返回指定索引处的元素。如果索引超出范围找不到对应元素则返回undefined。2. 基础示例我们通过几个简单的例子来快速了解它的用法。1. 数组的基础使用const cart [苹果, 香蕉, 橙子, 葡萄]; // 正向索引和传统写法一致 console.log(cart.at(0)); // 苹果 // 负向索引核心特性 console.log(cart.at(-1)); // 葡萄 (相当于 cart[cart.length - 1]) console.log(cart.at(-2)); // 橙子 // 越界访问 console.log(cart.at(10)); // undefined (不会报错非常优雅)2. 字符串的基础使用const filename app.component.ts; console.log(filename.at(0)); // a console.log(filename.at(-1)); // s // 结合 trim() 等链式调用 const greeting Hello World ; console.log(greeting.trim().at(-1)); // d3. 企业开发中的实际应用场景在企业级前端开发中at()方法不仅能让代码更简洁还能在特定业务逻辑下大放异彩。场景一面包屑导航与路由历史记录在后台管理系统中我们经常需要处理路由历史。比如获取用户上一次访问的页面或者在面包屑导航中获取当前层级的上一级页面。const routeHistory [/, /dashboard, /dashboard/user, /dashboard/user/profile]; // 传统写法 const prevRoute routeHistory[routeHistory.length - 2]; // 使用 at() 更加语义化 const currentRoute routeHistory.at(-1); // /dashboard/user/profile const parentRoute routeHistory.at(-2); // /dashboard/user场景二富文本编辑器/画板撤销操作栈操作在实现类似 Figma 画板或富文本编辑器时操作历史通常存在一个数组中。撤销操作就是弹出栈顶元素。const actionStack [createRect, changeColor, moveRect, resizeRect]; function undo() { if (actionStack.length 0) return; const lastAction actionStack.at(-1); // 查看最后一个操作 console.log(正在撤销操作: ${lastAction}); actionStack.pop(); // 真正移除 }场景三解析文件后缀名在处理文件上传时经常需要提取文件后缀。虽然可以用lastIndexOf但配合split和at写起来非常清爽。function getFileExtension(filename) { // 将文件名按 . 分割取最后一部分 return filename.split(.).at(-1); } console.log(getFileExtension(avatar.png)); // png console.log(getFileExtension(app.config.json)); // json console.log(getFileExtension(no_extension_file)); // no_extension_file (注意这种边界情况)场景四UI 组件轮播图无缝滚动在实现无限轮播图时有时需要把最后一张图克隆到第一张图前面或者获取最后一张图做平滑过渡。const slides document.querySelectorAll(.slide-item); const slidesArray Array.from(slides); // 获取最后一张幻灯片节点进行克隆 const lastSlideClone slidesArray.at(-1).cloneNode(true); // 插入到第一张前面 slidesContainer.insertBefore(lastSlideClone, slidesArray[0]);4. 注意事项虽然at()方法非常好用但在引入项目之前需要注意以下几点(1) 浏览器兼容性at()方法是 ES2022 引入的相对较新的特性。在现代浏览器Chrome 92, Firefox 90, Safari 15.4中支持良好。但如果你的项目需要兼容老旧浏览器如 IE 或低版本 Safari则不能直接使用需要通过 Babel 进行 polyfill或者谨慎使用。(2) 小数会被截断向下取整如果你不小心传入了小数at()不会报错而是会将其进行向下取整处理。const arr [10, 20, 30, 40]; console.log(arr.at(1.9)); // 20 (等同于 arr.at(1)) console.log(arr.at(-1.9)); // 30 (等同于 arr.at(-2)注意负数也是向负无穷取整)(3) 仅支持整数不支持布尔值等隐式转换在传统的方括号语法arr[]中JS 会发生隐式类型转换但at()方法则严格得多。如果传入非数字它会尝试转换为整数但强烈建议只传整数。const arr [1, 2, 3]; arr[1] // 2 (隐式转换) arr.at(1) // 2 (内部会做 ToInteger 转换但不推荐这样写代码可读性差)(4) 与 Lodash 的_.at区别如果你项目中使用了 Lodash请注意区分原生at()只接收一个索引参数返回单个元素。Lodash_.at()接收多个索引返回一个包含这些索引对应元素的新数组。const arr [a, b, c, d]; // Lodash _.at(arr, [1, 3]); // [b, d] // 原生 at arr.at(1); // b(5) 性能考量在极高频的循环操作中如百万次级别的数组末端访问原生方括号语法arr[arr.length - 1]的执行速度理论上会略快于arr.at(-1)因为后者涉及一次函数调用的开销。但在 99% 的日常前端业务中这点性能差异可以忽略不计。为了代码的可读性和可维护性推荐优先使用at()。

相关新闻

AI应用安全防护:从模型部署到数据隐私的工程实践指南

AI应用安全防护:从模型部署到数据隐私的工程实践指南

在实际 AI 应用开发中,安全防护往往是最容易被忽视但后果最严重的环节。随着 AI 技术在各行业的快速落地,从简单的智能对话到复杂的业务决策系统,AI 模型的安全漏洞可能导致数据泄露、决策偏差甚至系统被恶意操控。英国外交大臣的警告并非危言…

2026/9/23 17:03:20 阅读更多 →
uni-app 微信小程序开发:常用函数总结(一)

uni-app 微信小程序开发:常用函数总结(一)

一、 getCurrentPages():获取当前页面栈的实例1. 定义 getCurrentPages() 是微信小程序原生提供的全局函数,用于获取当前页面栈的实例。页面栈是一个数组,记录了从小程序启动到当前页面依次打开的所有页面。在 Uniapp 中,我们可以…

2026/9/28 12:03:46 阅读更多 →
iOS原生2D跑酷游戏开发实战:从Cocos2D-ObjC源码解析到性能优化

iOS原生2D跑酷游戏开发实战:从Cocos2D-ObjC源码解析到性能优化

1. 项目概述:从零到一构建iOS原生跑酷游戏最近在整理硬盘时,翻出了一个几年前用Cocos2D-ObjC完成的iOS跑酷游戏项目源码。这个项目虽然技术栈现在看来有些“复古”,但其中蕴含的游戏开发核心逻辑、性能优化技巧以及从零到一构建完整游戏的经验…

2026/10/7 16:25:09 阅读更多 →

最新新闻

.NET中JSON Patch实战:从RFC 6902到REST API部分更新

.NET中JSON Patch实战:从RFC 6902到REST API部分更新

上周做系统重构时,一个同组的同事突然问我:"改一个字段,客户端为什么要传一整个对象?"这个问题我太熟悉了。在用 .NET 写 Web API 的几年里,几乎每次做资源更新接口,都要面对"改一个状态值&…

2026/10/13 4:09:01 阅读更多 →
基于Zipline的A股回测框架改造:从交易日历到撮合规则

基于Zipline的A股回测框架改造:从交易日历到撮合规则

简介:面向A股量化策略开发者的ZipLine本地化Python框架,重点解决原版仅适配美股、无法应对T1交易规则、A股交易时段以及A/H差异等问题。内含完整回测与数据导入能力,用户可用pandas处理历史行情、计算因子,再通过matplotlib生成收…

2026/10/13 4:09:01 阅读更多 →
美赛O奖论文的建模思维黑匣子:从PDF到可执行知识图谱

美赛O奖论文的建模思维黑匣子:从PDF到可执行知识图谱

简介:本资源汇集2004—2020年美国大学生数学建模竞赛(MCM/ICM)全部Outstanding Winner(O奖)获奖论文,面向数学建模初学者、竞赛备赛学生及指导教师,提供权威、完整的高分方案范本与解题逻辑参考…

2026/10/13 4:09:01 阅读更多 →
FANUC FOCAS2以太网通信实战:从寄存器读取到Web实时HMI

FANUC FOCAS2以太网通信实战:从寄存器读取到Web实时HMI

简介:本资源是面向工业自动化工程师、数控系统集成人员及智能制造领域开发者的FANUC CNC屏幕显示功能实战资料包,聚焦FOCAS2以太网通信协议下的远程监控与界面交互实现。资源完整覆盖CNC状态实时采集、NC程序远程上传、报警信息解析、加工数据可视化等核…

2026/10/13 4:09:01 阅读更多 →
9个实用降AI率工具全解析:原理、搭配与完整实操流程

9个实用降AI率工具全解析:原理、搭配与完整实操流程

期末周的凌晨两点,A同学把AI生成的文献综述发给导师之前,顺手上传到某个检测平台,看到整页飘红的“AI疑似率82%”,整个人直接清醒。这几年本科生几乎人手一个AI写作助手,但交作业前最怕看到的就是那一串数字。“降AI率…

2026/10/13 4:09:01 阅读更多 →
鸿蒙环境下React Native列表开发实践:组件封装、性能优化与跨端适配

鸿蒙环境下React Native列表开发实践:组件封装、性能优化与跨端适配

各位做跨端开发的朋友,今天想聊聊我在鸿蒙生态下用 React Native 做列表类页面的一次完整实践。先说结论:在鸿蒙设备上跑 RN 已经不再是"能不能跑"的问题,而是"怎么跑得稳、跑得像原生"的问题。这篇内容会从组件封装、Pr…

2026/10/13 4:08:01 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →