JavaScript中使用for循环反转字符串时str.length为何要减1
关于JS反转字符串循环索引初始化的问题解答
1. 为什么i的初始值是str.length - 1
这是JavaScript字符串的零基索引特性直接决定的:
- 字符串的
length属性返回的是总字符数,比如"hello"的长度是5 - 字符串中每个字符的索引从0开始计数,有效索引范围是
0 到 length-1,对应"hello"的索引0是'h',索引4是'o' - 如果初始值直接写
str.length,第一次循环取str[i]就会拿到undefined,最终输出的结果开头会多出无效值。你可以把示例代码的初始值改成str.length运行测试,输入"test"会得到undefinedtset的错误结果,就能直观看到问题。
2. 和递归场景写n-1、n-2的逻辑是否一致
得分场景判断:
- 如果你是做和索引相关的递归操作(比如递归遍历数组、递归反转字符串),逻辑是完全相同的:都是为了对齐零基索引的最大有效值,避免访问超出边界的位置
- 如果是和索引无关的递归场景(比如斐波那契数列的递归计算
f(n) = f(n-1) + f(n-2)),这里的n-1/n-2是问题本身的数学推导规则,和零基索引没有关系,不属于同一种模式
你这段代码的循环终止条件写了i >= 0,刚好覆盖从最后一个索引到第一个索引的所有有效字符,边界完全对齐,不会漏取也不会越界,逻辑是完全通顺的。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

