【问题标题】:Integer being wrongly parsed to String整数被错误地解析为字符串
【发布时间】:2016-04-24 16:51:48
【问题描述】:

我正在为练习制作国际象棋应用程序,但有些事情让我失望了。我的方格编号为 1-64,第一排是 1 到 8,下一个是 9 到 16,依此类推。每次玩家尝试移动棋子时,我的程序都会根据规则检查目标方格是否合法。

对于我的国王,我有这样一句话:

else if (startID >= 58 && startID <= 63){ // bottom row
                if (endID == startID - 7 || endID == startID - 8 || endID == startID - 9 || endID == startID - 1 || endID == startID + 1) return true;
            }

如果国王在最后一排(而不是角落方格),则检查目标方格是否是相邻方格。但是,除了这部分检查目标方块是否直接在右侧之外,它们都可以工作:

endID == startID + 1

在我在有问题的变量前面添加一个“parseInt()”之前,我让程序的其他部分难以使用比较语句。有没有办法确保变量始终是整数?

【问题讨论】:

  • 是的,使用parseInt(startID,10)
  • 不,JavaScript 不使用类型。但是,为什么不使用嵌套数组来维护位置呢?
  • 您最初从哪里/如何获得startIDendID 的这些值?来自 HTML 属性?
  • 是的,它们都是每个方格的 ID
  • HTML 属性的值总是字符串,阅读的时候要转成数字。

标签: javascript parsing integer chess


【解决方案1】:

你可以试试下面的

var myStringNum = "1";
if (myStringNum === parseInt(myStringNum, 10) && myStringNum !== NaN){
    console.log('ok'); // does not print anything
}

var myNormalNum = 1;
if (myNormalNum === parseInt(myNormalNum, 10) && myNormalNum !== NaN){
    console.log('ok'); // prints ok
}

诀窍是使用“===”运算符。

这是jsfiddle example

【讨论】:

  • 当我用 === 替换所有 == 实例时,我的程序似乎不再工作了,可能是因为我在某些比较中涉及了 parseInt()
  • @user3509099 在进行任何比较之前,请确保您使用方法 parseInt(myVar, 10); 将您使用的变量转换为整数。
猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多