Javascript 为什么这段生成唯一随机数的代码使用“=-1”?

Javascript 为什么这段生成唯一随机数的代码使用“=-1”?,javascript,arrays,indexof,Javascript,Arrays,Indexof,我发现这段代码可以生成唯一的随机数。我不明白这部分代码的作用——或者更重要的是,我们为什么需要==-1?据我所知,它不可能等于-1 var arr = []; while(arr.length < 8){ var r = Math.floor(Math.random() * 100) + 1; if(arr.indexOf(r) === -1) arr.push(r); } console.log(arr); var arr=[]; 而(平均长度当元素不在数组中时,这将是

我发现这段代码可以生成唯一的随机数。我不明白这部分代码的作用——或者更重要的是,我们为什么需要
==-1
?据我所知,它不可能等于-1

var arr = [];
while(arr.length < 8){
    var r = Math.floor(Math.random() * 100) + 1;
    if(arr.indexOf(r) === -1) arr.push(r);
}
console.log(arr);
var arr=[];
而(平均长度<8){
var r=Math.floor(Math.random()*100)+1;
if(arr.indexOf(r)==-1)arr.push(r);
}
控制台日志(arr);
它的意思应该是“当在数组中找不到元素时,将元素推到数组中”

arr.indexOf(r)==-1
->当元素不在数组中时,这将是真的。这是因为数组中没有任何元素的索引是-1。第一个元素的索引为0,然后是1、2、3,依此类推

也许使用includes()更好:


这使条件更具可读性。

它检查数组中是否已存在“r”。如果是,它将不会将“r”推入/添加到数组arr中。

indexOf
在未找到元素时返回-1
。indexOf
在没有索引时返回
-1
,因为
0
是索引。也许他们应该让它返回
false
,但他们没有。FWIW:更好的/替代版本是洗牌。
if(!arr.includes(r))