gpt4 book ai didi

javascript - 为什么 for 循环有时会跳过一些迭代?

转载 作者:行者123 更新时间:2023-11-28 13:22:37 25 4
gpt4 key购买 nike

在下面的函数中,for 循环有时会跳过一次迭代。

在一些罕见的情况下,我还发现它跳过了两次迭代。如果我对 for 循环的理解仍然不完整,这有时会破坏我的代码,并且可能会影响我 future 的代码。

我进一步研究了这个问题,并尝试使用 while 循环进行相同的操作,发现如果使用 while 循环,则不会发生此问题。

为什么 for 循环有时会跳过一些迭代?

function forLoopString(len)
{
var string = 'abcdefghijklmnopqrstuvwxyz0123456789';

var character = '',
randomString = '';

for (var i = 0; i < len; i++)
{
character = string.charAt(Math.floor(Math.random() * string.length-1) + 0);
randomString += character;
}

if(randomString.length < len)
{
console.log('Less than required length!');
randomString = randomString + '5';
}
return randomString;
}

JSFiddle

最佳答案

显示的循环不会“跳过”任何迭代,但会按照指示从[0, len)开始迭代。

但是,charAt 的负参数使其看起来像是“跳过”,因为 "foo".charAt(-1) == ""。相同的空字符串结果适用于 String.charAt 的任何越界。 :

.. If the index you supply [to charAt] is out of range, JavaScript returns an empty string.

产生始终有效索引的更正将仅仅是 Math.floor(Math.random() * string.length)没有 -1。

虽然这有点偏差(对于真正关心的人来说),但这是“正确的”,因为 Math.random 返回 [0, 1) 范围内的数字。因此,Math.random() * len[0, len) 返回一个值;并作为下限后相同间隔中的整数。

此外,最好选择更有用的变量名称..并且,正如 Ed 指出的,+0 是无关紧要的,因为 Math.floor 返回一个(整数)数字。

关于javascript - 为什么 for 循环有时会跳过一些迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31890186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com