下面的代码包含一个名为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记录为未定义。有什么理由吗?
答案 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。