JavaScript中重复调用str.lastIndexOf('_')是否重复计算及优化疑问
问题解答
1. str.lastIndexOf('_')是否会被计算两次?
是的,两段代码里这个方法都会被执行两次:
- 第一段代码:
if判断条件里执行一次,若条件为真,赋值语句中会再执行一次。 - 第二段代码:三元表达式的条件部分执行一次,当条件为真时,true分支里又会执行一次(注:这段代码的true分支写法存在逻辑问题,应该返回索引值而非重复判断,但即便如此,方法确实被执行了两次)。
2. 存入单独变量是否是最优方案?
绝对是最优方案。把str.lastIndexOf('_')的结果存入一个变量,既能避免重复计算提升执行效率,还能让代码更简洁易读,示例如下:
const lastUnderscoreIndex = str.lastIndexOf('_'); let z = lastUnderscoreIndex !== -1 ? lastUnderscoreIndex : 99999;
这样只执行一次方法,代码逻辑也更清晰。
3. 可以为了可读性刻意忽略执行效率吗?
可以,但要结合具体场景判断:
- 如果是低频执行的代码(比如页面初始化逻辑、用户单次触发的操作),可读性优先更合理——代码的维护成本远大于那点可忽略的性能损耗,团队协作时清晰的代码比微乎其微的效率提升重要得多。
- 如果是高频执行的代码(比如大型循环、频繁触发的渲染回调、批量数据处理逻辑),则需要兼顾效率和可读性,此时把重复计算的结果存变量其实能同时满足两者,没必要做极端取舍。
内容的提问来源于stack exchange,提问作者Nikolai Tkachenko
相关产品推荐
相关产品推荐

