【问题标题】:JavaScript Math.random() returns "Undefined"JavaScript Math.random() 返回“未定义”
【发布时间】: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


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多