Javascript 为什么它返回未定义的值?

Javascript 为什么它返回未定义的值?,javascript,Javascript,我需要生成一个随机值,除了其他已定义的值外,它可以工作,但有时“selectedTroop()”方法返回一个未定义的值 var-troopIDs=[1,2,3,4]; const exceptedTroops=[1,2,3]; 函数随机数(最小值、最大值){ 返回Math.floor((Math.random()*max)+min); } 函数selectedTroop(){ var兵力=兵力[兰特(1,兵力长度)]; 对于(a=0;a

我需要生成一个随机值,除了其他已定义的值外,它可以工作,但有时“selectedTroop()”方法返回一个未定义的值

var-troopIDs=[1,2,3,4];
const exceptedTroops=[1,2,3];
函数随机数(最小值、最大值){
返回Math.floor((Math.random()*max)+min);
}
函数selectedTroop(){
var兵力=兵力[兰特(1,兵力长度)];
对于(a=0;alog(selectedTroop())数组的基本规则是从0开始计算索引。这意味着在
troopIDs
中,第一个元素位于索引0处,第二个元素位于索引1处,第三个元素位于索引2处,第四个元素位于索引3处

这意味着您的随机数不能大于3,因为您只定义了第三个索引之前的元素。您将得到一个未定义的
,因为您检查的是1-4而不是0-3的随机数。这就解决了问题:

var troop = troopIDs[rand(0, troopIDs.length - 1)];
我们根据从0(数组的开始)到长度减1的随机数获取数组中的元素。你可能会问为什么减1?这是因为length属性返回数组中的元素数。在当前的
troopIDs
情况下,共有4个元素。但是请记住,您只能检查第三个索引,因为我们从0开始计算数组元素。这意味着我们可以将数组的长度减去1,得到数组中的最后一个元素

希望这有帮助


数组的基本规则是从0开始计算索引。这意味着在
troopIDs
中,第一个元素位于索引0处,第二个元素位于索引1处,第三个元素位于索引2处,第四个元素位于索引3处

这意味着您的随机数不能大于3,因为您只定义了第三个索引之前的元素。您将得到一个未定义的
,因为您检查的是1-4而不是0-3的随机数。这就解决了问题:

var troop = troopIDs[rand(0, troopIDs.length - 1)];
我们根据从0(数组的开始)到长度减1的随机数获取数组中的元素。你可能会问为什么减1?这是因为length属性返回数组中的元素数。在当前的
troopIDs
情况下,共有4个元素。但是请记住,您只能检查第三个索引,因为我们从0开始计算数组元素。这意味着我们可以将数组的长度减去1,得到数组中的最后一个元素

希望这有帮助

为什么它返回未定义的值

如果
rand(1,troopIDs.length)
生成的数组索引超出
troopIDs
的范围,它将返回
undefined
。数组索引是基于0的:

var troopIDs            = [1, 2, 3, 4];
// array index             0  1  2  3
即,长度
4
数组中的最高索引为
3

让我们看看
rand
返回的内容:

  • Math.random()
    返回
    [0,1)
    范围内的值(即,
    [
    ]
    表示该值包含在Interval中,
    表示该值被排除在外。换句话说,
    0
    为什么它返回未定义的值

    如果
    rand(1,troopIDs.length)
    生成的数组索引超出了
    troopIDs
    的范围,它将返回
    undefined
    。数组索引基于0:

    var troopIDs            = [1, 2, 3, 4];
    // array index             0  1  2  3
    
    即,长度
    4
    数组中的最高索引为
    3

    让我们看看
    rand
    返回的内容:


    • Math.random()
      返回一个在
      [0,1)
      范围内的值(即,
      [
      ]
      表示该值包含在interval中,
      表示该值被排除在外。换句话说,
      0如何调用这些函数?“为什么它返回未定义的值?”?“如果
      rand(1,troopIDs.length)
      生成的数组索引超出了
      troopIDs
      的范围,它将返回
      undefined
      。请记住,最高的数组索引是
      troopIDs.length-1
      ,而不是
      troopIDs.length
      。如何调用这些函数?为什么它返回未定义的值?”?如果
      rand(1,troopIDs.length),它将返回
      undefined
      生成的数组索引超出了
      troopIDs
      的范围。请记住,最高的数组索引是
      troopIDs.length-1
      ,而不是
      troopIDs.length
      。我对数组的长度有很多困惑,因为实际的元素列表从1开始,这就是问题所在,感谢您的解决方案。我有很多困惑由于实际的元素列表是从1开始的,这就是问题所在,感谢您的解决方案。