JavaScript如何在指定字符“.”处切割字符串获取目标前缀子串
问题原因
slice() 方法的两个入参只接受数字类型的索引值:第一个是截取起始位置索引,第二个是截取结束位置索引。你传入字符串.作为第二个参数时,JS会将其隐式转换为NaN,导致截取逻辑失效,无法得到正确结果。
实现方案(无数组相关用法)
不需要借助数组操作,直接用字符串原生的indexOf()方法先定位.的位置索引,再做截取即可,完全匹配你的需求:
方法1:沿用slice实现
indexOf()会返回指定字符在字符串中第一次出现的数字索引,直接把这个值作为slice的结束位置参数即可,和你原本的代码思路最贴近:
<html> <body> <h1>JavaScript Strings</h1> <h2>The slice() Method</h2> <p id="demo"></p> <script> let text = "john.smith"; // 先定位.的位置 const dotIndex = text.indexOf("."); // 从字符串开头截取到.的位置 let result = text.slice(0, dotIndex); document.getElementById("demo").innerHTML = result; // 输出john </script> </body> </html>
整个逻辑全程不涉及数组创建、数组方法调用,符合你的要求。
方法2:用substring实现(可选)
如果不想用slice,也可以换成字符串原生的substring()方法,传参逻辑完全一致:
let text = "john.smith"; const dotIndex = text.indexOf("."); let result = text.substring(0, dotIndex); // 同样返回john
补充鲁棒性提示:如果业务场景中存在用户名不含
.的情况,indexOf()会返回-1,你可以加一层判断,遇到这种情况直接返回原字符串即可,避免截取结果异常。
内容的提问来源于stack exchange,提问作者Hi1mNico
相关产品推荐
相关产品推荐

