Javascript parseInt不处理字符串,试图从HTML值中获取整数

Javascript parseInt不处理字符串,试图从HTML值中获取整数,javascript,parseint,Javascript,Parseint,我正在做一个基本的游戏,我有一个瓷砖系统,我正在使用。每个磁贴都有一个ID“tileX”,其中X是一个数字(例如tile1)。我的职能如下: window.onclick = function() { var x = event.clientX, y = event.clientY, elementMouseIsOver = document.elementFromPoint(x, y).id; document.getElementById("tileTell").va

我正在做一个基本的游戏,我有一个瓷砖系统,我正在使用。每个磁贴都有一个ID“tileX”,其中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行,当我执行
控制台.log
时,它会给我正确的ID,并验证它是否是
字符串

之后,我想将
elementMouseIsOver
变量重置为整数,因此如果ID为
tile1
,我希望新结果为
1
。但是当我在控制台中查看它时,我得到了
NaN
。然后,当我立即检查它的类型时,我得到了
number


parseInt
似乎工作不正常,我做错了什么?我需要使用每个磁贴的ID名称进行数学运算,因此这对我的游戏至关重要。我知道这可能是一个非常愚蠢的错误,但我完全不知所措……

NaN
是正确的

如果parseInt遇到的字符不是指定基数中的数字,它将忽略该字符和所有后续字符,并返回解析到该点的整数值

未成功解析任何内容

编辑

您可以通过从字符串中删除非数字字符来完成所需的操作,前提是您始终将字符串+整数作为ID。请尝试以下操作:

parseInt(elementMouseIsOver.replace(/[^\d]/,""))

NaN
是正确的

如果parseInt遇到的字符不是指定基数中的数字,它将忽略该字符和所有后续字符,并返回解析到该点的整数值

未成功解析任何内容

编辑

您可以通过从字符串中删除非数字字符来完成所需的操作,前提是您始终将字符串+整数作为ID。请尝试以下操作:

parseInt(elementMouseIsOver.replace(/[^\d]/,""))
如果希望
parseInt()
以使用它的方式处理字符串,它必须以数字开头;在您的例子中,它以字母字符开头,因此(隐式基数为10)将正确地返回
NaN

您可以使用通用方法获取数字:

var num = +(elementMouseIsOver.match(/\d+/) || [])[0];
它匹配可以找到的第一组数字,然后使用一元加号运算符将其转换为实际的数值。如果字符串不包含任何数字,它将生成
NaN

在您的特定情况下,您还可以对紧跟在
“tile”
之后的零件应用
parseInt()

如果希望
parseInt()
以使用它的方式处理字符串,它必须以数字开头;在您的例子中,它以字母字符开头,因此(隐式基数为10)将正确地返回
NaN

您可以使用通用方法获取数字:

var num = +(elementMouseIsOver.match(/\d+/) || [])[0];
它匹配可以找到的第一组数字,然后使用一元加号运算符将其转换为实际的数值。如果字符串不包含任何数字,它将生成
NaN

在您的特定情况下,您还可以对紧跟在
“tile”
之后的零件应用
parseInt()


NaN的类型是数字

使用
isNaN()
测试值是否为
NaN
Nota数字


您还可以使用
Number()
cast而不是
parseInt()

NaN的类型是数字

使用
isNaN()
测试值是否为
NaN
Nota数字

您还可以使用
Number()
cast而不是
parseInt()

您需要先删除“tile”字符串,这样它才能正确解析值:

elementMouseIsOver = parseInt(elementMouseIsOver.substring("tile".length));
  • .substring(“tile”.length)
    返回一个子字符串,该子字符串以“tile”之后的字符开头(字符串中的位置4,计数从0开始),结果仅是ID的编号(作为字符串)
fiddle:

您需要先删除“tile”字符串,这样它才能正确解析值:

elementMouseIsOver = parseInt(elementMouseIsOver.substring("tile".length));
  • .substring(“tile”.length)
    返回一个子字符串,该子字符串以“tile”之后的字符开头(字符串中的位置4,计数从0开始),结果仅是ID的编号(作为字符串)

fiddle:

您试图在非数字的元素ID上解析int,当解析失败时,它将返回
NaN(*或不是数字*)

此外,您的
elementMouseIsOver
是控件的
ID
,我认为
.value
无法获得控件的值

elementMouseIsOver = document.elementFromPoint(x, y).id;

您试图在非数字的元素ID上解析int,当解析失败时,它将返回
NaN(*或不是数字*)

此外,您的
elementMouseIsOver
是控件的
ID
,我认为
.value
无法获得控件的值

elementMouseIsOver = document.elementFromPoint(x, y).id;

“1”
可能是一个整数字符串,可以
parseInt
'd,但
“tile1”
肯定不是。尝试
parseInt(elementMouseIsOver.slice(4),10)
“1”
可能是可以
parseInt
'd的整数字符串,但
“tile1”
肯定不是。尝试
parseInt(elementMouseIsOver.slice(4,10)
NaN
不表示
null
NaN
是数字类型,而
null
是null类型及其代表值。
NaN
不代表
null
NaN
是一种数字类型,而
null
是一种null类型及其代表值。
Number(“tile1”)
也产生
NaN
。其行为与