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

JS 字符串截取:substr vs substring 的实战对比与记忆技巧

1. 为什么我们需要区分 substr 和 substring在日常的 JavaScript 开发中字符串操作是最基础也是最频繁的需求之一。很多开发者都遇到过这样的困惑当需要截取字符串时到底该用 substr 还是 substring这两个方法看起来功能相似但实际使用时却经常因为记混参数而导致意外结果。我刚开始接触 JavaScript 时就经常在这两个方法上栽跟头。记得有一次做表单验证需要截取用户输入的前5个字符做校验结果因为用错了方法导致验证逻辑完全失效。后来排查了半天才发现是 substr 和 substring 的参数搞混了。这两个方法的主要区别在于它们的第二个参数substr(startIndex, length)从 startIndex 开始截取 length 长度的字符substring(startIndex, endIndex)从 startIndex 开始截取到 endIndex 前一个字符看起来很简单对吧但实际开发中我们的大脑往往会自动把这两个方法的参数记反。这就是为什么我们需要一些实用的记忆技巧以及深入了解它们在不同场景下的表现。2. 基础用法对比参数解析与常见场景2.1 substr 方法详解substr 方法的语法是str.substr(start[, length])它的工作方式相对直观const str JavaScript字符串操作; console.log(str.substr(4, 6)); // 输出 Script字这里有几个关键点需要注意start 参数如果是负数表示从字符串末尾开始计算位置length 参数是可选的如果省略会截取到字符串末尾length 不能为负数否则会被当作0处理实际开发中substr 特别适合以下场景截取固定长度的字符串如摘要生成从字符串末尾开始截取使用负数的start不确定结束位置但知道需要多长的情况2.2 substring 方法详解substring 方法的语法是str.substring(start[, end])它的行为与 substr 有显著不同const str JavaScript字符串操作; console.log(str.substring(4, 10)); // 输出 Scriptsubstring 的特点包括参数代表的是字符位置索引而不是长度如果 start end会自动交换这两个参数任何负数参数都会被当作0处理end 是可选的省略时截取到字符串末尾substring 最适合的场景包括精确知道开始和结束位置的情况需要确保参数顺序不影响结果的情况处理可能产生负数索引的情况会自动转为03. 高级对比特殊参数处理与边界情况3.1 负数参数的不同表现这是两个方法差异最大的地方之一。让我们看一个例子const str ABCDEFG; // substr 处理负数 console.log(str.substr(-3)); // 输出 EFG从倒数第3个开始 console.log(str.substr(-3, 2)); // 输出 EF // substring 处理负数 console.log(str.substring(-3)); // 输出 ABCDEFG负数被当作0 console.log(str.substring(2, -3)); // 输出 AB相当于 substring(0, 2)从上面的例子可以看出substr 的 start 可以为负表示从末尾计算substring 会把所有负数参数当作0处理这种差异在实际开发中可能导致严重bug需要特别注意3.2 参数交换的智能处理substring 有一个很贴心的特性当 start end 时它会自动交换这两个参数const str 0123456789; console.log(str.substring(5, 2)); // 输出 234 console.log(str.substr(5, 2)); // 输出 56而 substr 则严格遵守参数顺序不会进行任何自动调整。这个区别在动态计算索引时尤为重要可能导致完全不同的结果。4. 终极记忆技巧长短配对法经过多年的实践和教学我总结出了一个简单有效的记忆方法我称之为长短配对法。这个方法基于两个观察方法名称长度substr → 6个字母较短substring → 9个字母较长参数含义长度length → 表示长度较短概念endIndex → 表示结束索引较长概念记忆口诀就是短对短长对长。即较短的方法名 substr 对应较短的参数概念 length较长的方法名 substring 对应较长的参数概念 endIndex这样每次使用时只需要看看方法名的长度就能想起第二个参数的含义了。5. 实际项目中的选择建议5.1 什么时候用 substr在以下情况下substr 可能是更好的选择需要从字符串末尾开始截取时使用负索引知道需要截取的长度而非结束位置时处理可能为负的动态索引时如果不想被转为0例如实现一个显示更多功能时function getPreview(text, maxLength) { return text.length maxLength ? text.substr(0, maxLength) ... : text; }5.2 什么时候用 substring在以下场景中substring 通常更合适需要精确控制开始和结束位置时参数可能乱序但希望结果一致时处理用户输入或不确定的索引时自动处理负数比如提取URL中的某一部分function getDomain(url) { const start url.indexOf(://) 3; const end url.indexOf(/, start); return url.substring(start, end ! -1 ? end : undefined); }6. 性能考量与现代替代方案虽然 substr 和 substring 仍然被广泛使用但值得注意的是ECMAScript 规范中 substr 已被标记为遗留功能这意味着未来可能会被移除。在现代JavaScript中我们还有更多选择slice 方法结合了两者的优点允许负数索引像 substr使用位置而非长度像 substringconst str abcdef; console.log(str.slice(1, 3)); // bc console.log(str.slice(-3)); // def字符串扩展运算符可以将字符串转为字符数组操作正则表达式对于复杂的字符串提取更灵活在实际项目中我越来越倾向于使用 slice 方法因为它更直观且功能全面。不过理解 substr 和 substring 的区别仍然是每个JS开发者必备的基础知识。7. 常见误区与调试技巧即使有了记忆方法在实际编码中还是容易犯错。以下是我总结的几个常见陷阱参数类型混淆// 错误示范 const endPos 5; // 字符串类型的数字 console.log(012345.substring(2, endPos)); // 输出 234 console.log(012345.substr(2, endPos)); // 输出 2345非严格模式下解决方法始终确保参数是数字类型可以使用 parseInt 或 Number 转换。Unicode字符处理const str a; // 第一个字符是4字节的UTF-16 console.log(str.substr(0, 1)); // 输出乱码 console.log(str.substring(0, 1)); // 同样输出乱码对于包含多字节字符的字符串建议先转为数组console.log([...str].slice(0, 2).join()); // 正确输出 a链式调用时的混淆// 容易混淆的链式调用 hello.toUpperCase().substr(1, 3); // ELL hello.toUpperCase().substring(1, 3); // EL调试技巧在链式调用中建议拆分成多行或添加注释说明意图。记住当遇到奇怪的字符串截取结果时首先检查使用的是 substr 还是 substring然后确认参数的含义是否符合预期。

相关文章:

JS 字符串截取:substr vs substring 的实战对比与记忆技巧

1. 为什么我们需要区分 substr 和 substring? 在日常的 JavaScript 开发中,字符串操作是最基础也是最频繁的需求之一。很多开发者都遇到过这样的困惑:当需要截取字符串时,到底该用 substr 还是 substring?这两个方法看…...

mfc140u.dll文件丢失怎么办?5种高效修复方法详解

1. 为什么你的电脑突然找不到mfc140u.dll了? 前几天帮朋友修电脑,他打开公司财务软件时突然跳出"找不到mfc140u.dll"的报错。这个场景太常见了——特别是用老版本行业软件的朋友,几乎都遇到过这个红色警告框。其实mfc140u.dll就像软…...

ESLyric-LyricsSource:终极逐字歌词解析方案,让Foobar2000歌词体验完美升级!

ESLyric-LyricsSource:终极逐字歌词解析方案,让Foobar2000歌词体验完美升级! 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSourc…...

终极指南:3分钟学会用Ofd2Pdf免费实现OFD到PDF无损转换

终极指南:3分钟学会用Ofd2Pdf免费实现OFD到PDF无损转换 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf Ofd2Pdf是一款专为中国用户设计的开源工具,能够快速、无损地将OFD格式电…...

OpenClaw多通道管理:Phi-3-vision-128k-instruct同时接入飞书与钉钉机器人

OpenClaw多通道管理:Phi-3-vision-128k-instruct同时接入飞书与钉钉机器人 1. 为什么需要多通道管理? 上周我接到一个需求:团队同时使用飞书和钉钉两个平台,需要让AI助手在两个渠道都能响应。最初我尝试运行两个OpenClaw实例分别…...

泛微Ecology9全栈二开实战:从零构建增删改查模块(后端Action+前端Ecode)

1. 泛微Ecology9二次开发环境搭建 第一次接触泛微Ecology9的二次开发时,我被它独特的开发模式吸引了。与常规的Java Web开发不同,泛微采用了自己的一套框架体系,这对新手来说确实需要适应期。下面我就把环境搭建过程中踩过的坑和经验分享给大…...

Mac系统下Jmeter压力测试工具从零配置到实战:JDK8安装+汉化+电商压测案例

1. 为什么Mac用户需要Jmeter压力测试 做电商的朋友应该都遇到过这样的场景:大促活动刚开始,页面突然卡死无法下单;秒杀商品刚上架,库存瞬间清零却出现超卖。这些问题往往源于系统在高并发场景下的性能瓶颈。而Jmeter正是解决这类问…...

Mac开发者必备:OpenClaw联动Qwen3.5-9B实现Xcode调试自动化

Mac开发者必备:OpenClaw联动Qwen3.5-9B实现Xcode调试自动化 1. 为什么需要AI介入Xcode调试? 作为长期奋战在iOS开发一线的程序员,我每天至少有30%的时间消耗在Xcode的调试循环中:反复查看崩溃日志、手动编写测试用例、点击模拟器…...

堡垒机实战指南:如何构建企业级运维安全审计体系

1. 堡垒机:企业运维安全的"黑匣子" 想象一下飞机上的黑匣子,它能完整记录飞行过程中的所有操作和数据。在企业IT运维领域,堡垒机就扮演着类似的角色。我第一次接触堡垒机是在2015年,当时所在的公司因为一次误操作导致核…...

B站视频下载器:三步教你保存任何想看的B站视频到本地

B站视频下载器:三步教你保存任何想看的B站视频到本地 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾遇到过这样的…...

STIX Two字体:学术排版的终极解决方案

STIX Two字体:学术排版的终极解决方案 【免费下载链接】stixfonts OpenType Unicode fonts for Scientific, Technical, and Mathematical texts 项目地址: https://gitcode.com/gh_mirrors/st/stixfonts 你是否曾经在撰写学术论文时,为数学符号显…...

Retrieval-based-Voice-Conversion-WebUI:终极AI语音变声指南,10分钟打造专属音色

Retrieval-based-Voice-Conversion-WebUI&#xff1a;终极AI语音变声指南&#xff0c;10分钟打造专属音色 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Tren…...

智慧树自动刷课终极指南:Autovisor让你的网课学习效率翻倍!

智慧树自动刷课终极指南&#xff1a;Autovisor让你的网课学习效率翻倍&#xff01; 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为智慧树网课的繁琐操作…...

ESP32+W6100异步以太网配置管理框架

1. 项目概述AsyncESP32_W6100_Manager是一款专为 ESP32 平台设计的、面向以太网连接管理的异步配置框架。它并非一个独立的网络协议栈&#xff0c;而是构建在 ESP-IDF LwIP 协议栈、W6100 以太网 PHY 驱动以及ESPAsyncWebServer异步 Web 服务器之上的高层应用管理库。其核心使命…...

GLM-4.7-Flash保姆级教程:CSDN镜像一键启动,30秒开启AI对话

GLM-4.7-Flash保姆级教程&#xff1a;CSDN镜像一键启动&#xff0c;30秒开启AI对话 1. 为什么选择GLM-4.7-Flash&#xff1f; GLM-4.7-Flash是智谱AI推出的新一代开源大语言模型&#xff0c;采用创新的MoE&#xff08;混合专家&#xff09;架构&#xff0c;总参数量达30B。相…...

彻底告别OpenClaw使用焦虑:我给他装上了“透视眼”和“批量克隆模组技

指令替换 项目需求&#xff1a;将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一&#xff0c;测试代码示例 test.c // test.c #includ…...

Phi-4-mini-reasoning完整教程:含端口映射、域名绑定、SSL证书配置

Phi-4-mini-reasoning完整教程&#xff1a;含端口映射、域名绑定、SSL证书配置 1. 平台介绍 Phi-4-mini-reasoning 是一个专注于推理任务的文本生成模型&#xff0c;特别适合处理数学题、逻辑题、多步分析和简洁结论输出。与通用聊天模型不同&#xff0c;它采用"题目输入…...

告别网盘限速烦恼:一个浏览器脚本带来的下载自由革命

告别网盘限速烦恼&#xff1a;一个浏览器脚本带来的下载自由革命 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

芯轴-心轴毕业设计论文含CAD图纸

芯轴的设计需严格匹配被连接零件的孔径尺寸&#xff0c;其圆柱度与同轴度误差需控制在极小范围内&#xff0c;否则会引发振动或加速磨损。CAD图纸的绘制是设计过程中的重要环节。工程图则需标注关键尺寸、形位公差及表面处理要求。例如&#xff0c;芯轴的键槽设计需明确宽度、深…...

5步掌握Xenos:Windows DLL注入实战指南

5步掌握Xenos&#xff1a;Windows DLL注入实战指南 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 你是否曾为调试插件而反复重启目标进程&#xff1f;是否在安全测试中需要监控软件行为却无从下手&#xff1f;想象一…...

3步安装!macOS微信防撤回插件WeChatIntercept完整使用指南

3步安装&#xff01;macOS微信防撤回插件WeChatIntercept完整使用指南 【免费下载链接】WeChatIntercept 微信防撤回插件&#xff0c;一键安装&#xff0c;仅MAC可用&#xff0c;支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 在macOS上…...

质数判定的平方根法则对打印质数问题

定理&#xff1a;如果一个数 x&#xff0c;在2~√x都没有能整除它的数&#xff0c;那么x就是质数。证明&#xff1a;对于一个在2~x - 1的数 t&#xff0c;如果它能整除 x&#xff0c;那么一定有一个数d x / t&#xff0c;也能整除 x。又因为d * t x&#xff0c;√x * √x x&…...

优酷网页截图黑屏问题解析:探索浏览器图形服务API的幕后机制

1. 优酷网页截图黑屏现象解析 最近有不少用户反馈&#xff0c;在优酷网页观看视频时尝试截图&#xff0c;结果保存的图片却是全黑的。这个问题看似简单&#xff0c;背后却涉及到浏览器图形渲染的复杂机制。作为一名长期研究浏览器底层技术的开发者&#xff0c;我发现这个问题其…...

氮化硼量子点修饰金纳米颗粒,BN QDs‑AuNPs,CdSe QDs‑AuNPs,CdSe量子点修饰金纳米颗粒,反应机制

氮化硼量子点修饰金纳米颗粒&#xff0c;BN QDs‑AuNPs&#xff0c;CdSe QDs‑AuNPs&#xff0c;CdSe量子点修饰金纳米颗粒&#xff0c;反应机制.BN QDs-AuNPs&#xff08;氮化硼量子点修饰金纳米颗粒&#xff09;**是一类由零维纳米材料氮化硼量子点&#xff08;BN quantum do…...

氧化锌纳米棒修饰纳米金,ZnO NR‑AuNPs,氧化铜修饰纳米金,CuO‑AuNPs,构建原理

氧化锌纳米棒修饰纳米金&#xff0c;ZnO NR‑AuNPs&#xff0c;氧化铜修饰纳米金&#xff0c;CuO‑AuNPs&#xff0c;构建原理ZnO NR-AuNPs&#xff08;氧化锌纳米棒修饰纳米金&#xff09;**是一类由一维半导体纳米结构氧化锌&#xff08;ZnO&#xff09;纳米棒&#xff08;na…...

如何快速释放磁盘空间:Windows系统驱动清理完整指南

如何快速释放磁盘空间&#xff1a;Windows系统驱动清理完整指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾为C盘空间不足而烦恼&#xff1f;是否发现Windows系统变得越来越…...

**发散创新:服务端渲染实战优化——从基础到高性能架构设计**在现代前端开发中,**服务端渲染(SSR)** 已

发散创新&#xff1a;服务端渲染实战优化——从基础到高性能架构设计 在现代前端开发中&#xff0c;服务端渲染&#xff08;SSR&#xff09; 已成为提升 SEO 和首屏加载速度的关键技术。尤其是在 Vue.js 和 React 生态中&#xff0c;SSR 不再是“可选项”&#xff0c;而是构建企…...

如何彻底解决机械键盘连击问题:Keyboard Chatter Blocker完整指南

如何彻底解决机械键盘连击问题&#xff1a;Keyboard Chatter Blocker完整指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经…...

NEURAL MASK保姆级教学:处理失败图像的5种常见原因与修复技巧

NEURAL MASK保姆级教学&#xff1a;处理失败图像的5种常见原因与修复技巧 1. 引言&#xff1a;为什么你的抠图效果不理想&#xff1f; 在使用NEURAL MASK&#xff08;幻镜&#xff09;进行图像处理时&#xff0c;很多用户都会遇到一个共同的问题&#xff1a;为什么有时候处理…...

终极指南:3种简单方法恢复B站经典界面,让怀旧体验重回2026

终极指南&#xff1a;3种简单方法恢复B站经典界面&#xff0c;让怀旧体验重回2026 【免费下载链接】Bilibili-Old 恢复旧版Bilibili页面&#xff0c;为了那些念旧的人。 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Old 还在怀念Bilibili那个简洁经典的旧版界…...