从数组检索的var是不确定的?

时间:2018-12-11 08:54:18

标签: javascript jquery

下面的代码包含一个名为buttonColours的数组,其随机数为0到3,则randomColour应该是buttonColours数组中的随机颜色,但事实并非如此。它将randomColour分类为未定义。

var buttonColours = ["blue", "red", "green"];
var randomNumber = Math.floor(Math.random * 3);
var randomColour = buttonColours[randomNumber];
console.log(randomColour);

console.log仅将randomColor记录为未定义。有什么理由吗?

4 个答案:

答案 0 :(得分:5)

如果您在每一行上执行console.log,您将直接知道问题所在:

var buttonColours = ["blue", "red", "green"];
console.log(buttonColours); // ["blue", "red", "green"]
var randomNumber = Math.floor(Math.random * 3);
console.log(randomNumber); // NaN
var randomColour = buttonColours[randomNumber];
console.log(randomColour); // undefined

问题是您的Math.floor(Math.random * 3)返回了NaN,应该是Math.random()

var buttonColours = ["blue", "red", "green"];
var randomNumber = Math.floor(Math.random() * 3);
var randomColour = buttonColours[randomNumber];
console.log(randomColour);

答案 1 :(得分:3)

我认为这是您想要实现的。

如果您尝试找出每一行的结果,您将会知道Math.floor(Math.random * 3)返回'Nan',因此,当您尝试选择该位置的元素时,最终将是{{ 1}}。

这将返回undefined,因为Nan是一个函数,您需要Math.random才能调用一个函数。您可以在我的代码中看到它是()

Math.random()

答案 2 :(得分:0)

您可以通过此功能获得一定范围内的随机数。 Math.random()返回[0,1)内的随机值。因此,您必须将[0,1)映射到您指定的范围。

function getRandom(min, max) {
  return Math.floor(Math.random() * (max-min) + min);
}

在此代码段中查看您的解决方案-

var buttonColours = ["blue", "red", "green"];
var randomNumber = getRandom(0, buttonColours.length);
var randomColour = buttonColours[randomNumber];
console.log(randomColour);

function getRandom(min, max) {
  return Math.floor(Math.random() * (max-min) + min);
}

答案 3 :(得分:0)

问题在这里:

var randomNumber = Math.floor(Math.random * 3);

Math.random()是Math对象的方法,而不是属性,因此需要 称为 。调用是通过在函数名称后加上一对括号来完成的,因此要调用名为sayHello的函数,我会这样做:

sayHello()

因此,要解决您的问题,请在Math.random之后放置一对括号,使该行看起来像这样:

var randomNumber = Math.floo(Math.random() * 3);

如果您想知道Math.random()的实际作用,请查看MDN's documentation for it

  

Math.random()函数返回一个浮点伪随机数,范围为0-1(包括0,但不包括1)...

因此,从本质上讲,它返回0到0.9999999 ...之间的随机数,这就是您的代码行的原因:

Math.floor(Math.random() * 3)

返回整数0、1或2,但不返回3。