JavaScript 字符串 substr() 已被废弃:为什么会踩坑?最清晰替代指南(slice/substring)
JavaScript 字符串 substr() 已被废弃:为什么会踩坑?替代用法详解 想快速答案?结论是:不要再使用 substr()。它已被标准标记为弃用,未来存在移除风险;推荐统一使用 slice()(必要时再用 substring())。 下面是详细解释与迁移清单。 那个90%前端还在踩的坑:substr(),一个早已被浏览器“拉黑”的API! 你有没有经历过这样的场景:一段代码在你的电脑上跑得好好的,一上线就出了岔子?或者,你在维护一坨“上古代码”时,总感觉哪里不对劲,却又说不上来? 小心,你可能踩中了一颗早已被埋下的“地雷”。而这颗雷的名字,很可能就是 substr()。 没错,就是那个我们用来截取字符串,熟练得像每天吃饭喝水一样的 substr()。可是一个残酷的事实是:这个API已经被现代浏览器标准给“拉黑”了。它就像一个过期的罐头,虽然暂时吃不坏肚子,但随时可能让你“中毒”。 更惊人的是,据不完全统计,可能还有90%的开发者在项目中无意识地使用它。 一场“家族内斗”:为什么 substr() 被踢出群聊? 要理解 substr() 为何失宠,我们得认识一下它的两位兄弟:slice() 和 substring()。这三位都干着截取字符串的活儿,但脾气秉性却大不相同。 想象一下,String 是一个大家族,这三兄弟是家族里最擅长切分家产(字符串)的。 slice(起点, 终点) substring(起点, 终点) substr(起点, 长度) 发现问题了吗? 老大 slice 和老二 substring 早就商量好了,切分家产的规矩是“从几号位置切到几号位置”,简单明了。 唯独老三 substr,天生“反骨”,非要自己搞一套:“从几号位置开始,数几个单位再下刀”。 这种不合群的设计,就是它被废弃的根本原因。这就像你开车导航,所有地图都告诉你“从人民广场开到世纪大道”,突然一个导航非要说“从人民广场出发,向东 5 公里”。在快节奏的编码中,这种思维模式的切换极易导致混乱和 bug。 代码不仅是给机器执行的,更是给人读的。这种不一致性,就是程序员世界的“万恶之源”。 王者之选:为什么 slice() 是你的最佳伴侣? 既然 substr() 不推荐用了,那我们该用谁?首选,也是我的唯一推荐:slice()。 slice() 不仅严格遵守“起点-终点”的约定,它还有一个独门绝技——支持负数索引! 这简直是神来之笔!想取字符串末尾的几个字符?在过去,你可能需要 str.substr(str.length - 4),又臭又长。 现在用 slice() 呢? const str = "你好,梦兽编程!"; // 想从后面取 4 个字?一个负数搞定! str.slice(-4); // "编程!" // 从第 4 个字开始,切到倒数第 2 个字 str.slice(3, -1); // "梦兽编程" 看到没?slice() 的负数索引就像给你开了一扇后门,操作起来优雅又高效。它就像一个经验丰富、做事滴水不漏的专业人士,指令清晰,从不让你猜。 ...