【发布时间】:2019-10-08 13:36:31
【问题描述】:
我有一个使用 Math.random() 的代码块。我注意到偶尔返回值会是“未定义”。这是我使用的代码:
return data.map(val => {
var r = Math.random();
if (r < this.mutChance) {
console.log(Math.random);
debugger;
return this.rDna(val);
}
return val;
});
当我将 mutChance 变量设置为 0 并让代码运行一段时间后,调试器最终被调用并显示 r 的值未定义。我试图通过在控制台中运行来重现问题
var test = Math.random();
while(test){
test = Math.random();
}
但是,这个循环从未结束。我不知道为什么该函数在我的对象和 console.log(Math.random); 中的行为会有所不同。表示该函数仍有其本机代码。我不会在任何地方覆盖随机函数,也不会在其他任何地方使用变量 r。
我对 JavaScript 比较陌生,在其他任何地方都找不到这个问题。我唯一导入的其他代码是 p5.min.js 包。
【问题讨论】:
-
正如他所提到的,他记录了函数(而不是它的值)以确保它没有被覆盖。
-
@Pointy Smallhack 是对的,console.log 只是为了确认我的代码中没有任何内容正在修改原始函数,而不是试图从中获取实际值。
-
Math.random()返回undefined将是平台问题;这似乎极不可能实际发生。调试器中更有可能出现一些奇怪的不良行为。typeof r的显式测试是"number"或简单的r !== undefined会更值得信赖。 -
我认为问题在于 chrome 开发工具如何显示该值。当我运行
console.log(r);时,它不再显示为未定义,而是显示为一些非常小的数字。事实证明,我的代码的另一部分是将“mutChance”的值从 0 更改为不同的,也是非常小的值。我不知道为什么 chrome 会将这些数字解释为“未定义”。 -
this.rDna(val)返回什么?
标签: javascript random