JS编程题DashInsert中循环条件用str.length-1而非str.length的原因
原因解答
核心原因是循环内部要同时访问i和i+1两个位置的元素,边界必须限制在合法索引范围内:
- JS的字符串、数组索引从0开始计数,合法索引最大值是
长度-1。如果循环终止条件写成i < str.length,最后一轮循环的i值等于str.length - 1,此时i+1就等于str.length,已经超出合法索引范围,拿到的值是undefined,做取模运算得到的结果是NaN,判断逻辑完全失效。 - 你可以代入示例输入验证:比如输入字符串
454793的长度是6,合法索引范围是0~5。循环只需要走到i=4就足够了,此时判断的是最后一对相邻元素索引4的9和索引5的3,刚好覆盖所有需要比对的相邻字符对,没有遗漏也不会越界。
如果强行把终止条件改成i < str.length,代码运行也不会抛出显性错误,但最后一轮循环的判断完全是无意义的空转,没有任何作用。
内容的提问来源于stack exchange,提问作者Detla888
相关产品推荐
相关产品推荐

