JavaScript Parseint无法在字符串上工作,试图从HTML值中获取整数



我正在制作一个基本游戏,并且我使用的是一个瓷砖系统。每个瓷砖具有"泰勒克斯"的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;

最新更新