2012-12-07 211 views
0

我有一个函数可以对两个数字进行一些数学运算,但是我似乎把NaN当作是它的回报....我不知道为什么,但这是我的函数:Javascript返回NaN

function mouseConvert(mousex,mousey){ 

console.log(mousex+ ' '+ mousey); 

    var x = (mousex + Data.offset_x) - (settings.width/2) - settings.offset_left; 
    var y = (mousey + Data.offset_y) - settings.offset_top; 
    var tx = Math.round((x + y * 2)/settings.grid) - 1; 
    var ty = Math.round((y * 2 - x)/settings.grid) - 1; 

console.log(tx+ ' '+ ty); 

return [tx,ty]; 
} 

从功能控制台日志输出的显示:

enter image description here

这里是Data和值settings

enter image description here

为什么它不返回数字,而是NaN?

+0

使用调试器,您可以知道所有变量的值在哪里完成微积分。 –

+0

你的意思是console.log?我添加了第二张照片,显示输入值....和结果。 – Sir

+0

向我显示第二条语句的日志代码 –

回答

3

那么,如果鼠标位置是类似"0"的字符串,请考虑:

(mousex + Data.offset_x) 

变为

"0" + -32 //"0-32" 

的字符串,然后"0-32"会试图将转换为数字的,当你做减法- (settings.width/2)。并且Number("0-32")NaN,之后一切都变成NaN

你应该在开始时将它们转换为数字。或者说,从来没有将它们转换为字符串,因为事件对象已将它们作为数字...

0

u必须转换mouseX和mouseY的,以整数或浮点数parseInt函数或parseFloat

<html> 
<head> 
</head> 
<body> 
<script> 
var Data = { ipos: NaN, jpos: NaN, level: "1", money: "1000", offset_x: -32, offset_y: -250}; 
var settings = { grid: 64, height: 500, offset_left: 258, offset_top: 85, width: 1165}; 

function mouseConvert(mousex,mousey){ 
mousex = parseInt(mousex); 
mousey = parseInt(mousey); 
console.log(mousex+ ' '+ mousey); 

    var x = (mousex + Data.offset_x) - (settings.width/2) - settings.offset_left; 
    var y = (mousey + Data.offset_y) - settings.offset_top; 
    var tx = Math.round((x + y * 2)/settings.grid) - 1; 
    var ty = Math.round((y * 2 - x)/settings.grid) - 1; 

console.log(tx+ ' '+ ty); 

return [tx,ty]; 
} 
mouseConvert('0', 1); 
</script> 
</body> 
</html> 

回报

0 1 
-25 2 

没有parseInt函数将返回

+0

鼠标位置可以是浮动吗?还是它捕捉到整数位置? – Sir

+0

鼠标位置将始终为int。没有子像素鼠标位置。 – Mathias

+0

但如果你把 mousex = parseInt(mousex); mousey = parseInt(mousey);代码正在工作 – showi