我一直在摸索这个问题几周, 我无法解决问题。
我花了好几天试图到达原来的.js文件之外的实际功能。
我希望能够在node.js
中创建一个能够在特定参数(如1-10或1-100)内生成随机数的函数,并将其转发回来到控制台或用户指定的变量。
这是我当前的代码:
server.js
var myModule = require("./my_module.js");
console.log("your random number is" + myModule.hello(10)); //<-- the 10 represents the TOP number that will generate, if you look in the proceeding file, it adds a 1 to it as required by the code
my_module.js
function hello(foo) {
return Math.floor((Math.random()*foo)+1);
}
module.exports.hello = hello;
这里强调的问题是我从控制台获得NaN(不是数字)。 我意识到这意味着在翻译的某个地方,数字可能会变成一个字符串而不能被mathFloor字符串读取。
答案 0 :(得分:0)
您可以使用jQuery方法isNumeric来验证它们是否为您提供了数字。 http://api.jquery.com/jQuery.isNumeric/
要确保它仍然是一个数字并且你没有无意中使它成为一个字符串,请使用parseInt()或parseFloat()。
function hello(foo) {
return Math.floor((Math.random()*parseInt(foo))+1);
}
答案 1 :(得分:0)
虽然Erik的答案解决了问题,但它不会告诉你字符串的来源。您可以使用console.trace来简化调试过程。
function hello(foo) {
var result = Math.floor((Math.random()*parseInt(foo))+1);
if (isNaN(result)) {
console.trace("result is NaN")
}
return result;
}
> hello("a")
Trace: NaN
at hello (repl:4:9)
at repl:1:2
at REPLServer.self.eval (repl.js:109:21)
at Interface.<anonymous> (repl.js:248:12)
at Interface.EventEmitter.emit (events.js:96:17)
at Interface._onLine (readline.js:200:10)
at Interface._line (readline.js:518:8)
at Interface._ttyWrite (readline.js:736:14)
at ReadStream.onkeypress (readline.js:97:10)
at ReadStream.EventEmitter.emit (events.js:126:20)
at emitKey (readline.js:1058:12)
at ReadStream.onData (readline.js:807:7)
NaN
>
通过查看堆栈跟踪,您将能够找到提供非Number参数的代码。