我正在制作一个基本游戏,并且我使用的是一个瓷砖系统。每个瓷砖具有"泰勒克斯"的ID,其中x为一个数字(例如,tile1)。我的功能如下:
window.onclick = function() {
var x = event.clientX, y = event.clientY,
elementMouseIsOver = document.elementFromPoint(x, y).id;
document.getElementById("tileTell").value = elementMouseIsOver;
console.log(elementMouseIsOver);
console.log(typeof(elementMouseIsOver));
elementMouseIsOver = parseInt(elementMouseIsOver);
console.log(elementMouseIsOver);
console.log(typeof(elementMouseIsOver));
}
中的第4行填充输入字段,因此我可以视觉上查看我单击的瓷砖(我正在使用它来确保事情正常工作,因此我可以找到所需的瓷砖)。效果很好。在第5行上进行console.log
时,它给了我适当的ID,并验证它是string
。
之后,我想将elementMouseIsOver
变量重置为整数,因此,如果ID为tile1
,则希望新结果为1
。但是,当我在控制台中查看它时,我会得到NaN
。然后,当我立即检查它的类型时,我会得到number
。
parseInt
似乎无法正常工作,我在做什么错?我需要将每个瓷砖的ID名称用于数学操作,因此这对我的游戏至关重要。我知道这可能是一个非常愚蠢的错误,但我完全不知所措...
如果您希望parseInt()
以使用它的方式处理字符串,则必须从数字开始;在您的情况下,它始于字母顺序的字符,因此(以10的隐式radix为10),它将正确返回NaN
。
您可以使用通用方法获取数字:
var num = +(elementMouseIsOver.match(/d+/) || [])[0];
它与它可以找到的第一组数字匹配,然后使用Unary Plus运算符将其投入实际数字值。如果字符串不包含任何数字,它将产生NaN
。
在您的特殊情况下,您也可以在紧随"tile"
的部分上应用parseInt()
:
var num = +elementMouseIsOver.substr(4);
NaN
是正确的。
https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/parseint
如果parseint遇到指定radix中不是数字的字符,它会忽略它,并且所有后续字符并返回到达该点的整数值。
没有成功解析。
编辑
您可以通过从字符串中删除非数字字符来完成想要的工作,假设您始终将字符串 整数作为ID。尝试以下操作:
parseInt(elementMouseIsOver.replace(/[^d]/,""))
您需要先删除"图块"字符串,因此它可以正确解析值:
elementMouseIsOver = parseInt(elementMouseIsOver.substring("tile".length));
-
.substring("tile".length)
返回一个从"瓷砖"之后的字符开始的子字符串(字符串中的位置4,计数从0开始),仅导致ID的数量(作为字符串)。
小提琴:http://jsfiddle.net/rk96uygd/
nan的类型是数字。
使用isNaN()
测试值是NaN
还是 n ot a numbernhttps://developer.mozilla.org/en/docs/web/javascript/Reference/global_objects/isnan
您也可以使用Number()
铸件代替parseInt()
。
您试图在非数字的元素ID上进行parseInt,当解析失败时,它将返回NaN (*or not a number*)
elementMouseIsOver = parseInt(elementMouseIsOver);
此外,您的elementMouseIsOver
是控制的ID
,我认为.value
无法获得控制的值
elementMouseIsOver = document.elementFromPoint(x, y).id;