【问题标题】:Comparing numbers in javascript比较javascript中的数字
【发布时间】:2012-10-29 18:01:02
【问题描述】:

这是我的代码:

var score1 = $(this).attr('data-score1');
var score2 = $(this).attr('data-score2');

if (score1 < score2) {
  // do some
}
if (score2 > score1) {
  // do something else
}

现在,只要两个变量都为 100,这可以正常工作,但只要这些变量中的一个大于 100 而另一个不是错误的 if 语句被触发。这里到底发生了什么? 感谢您的建议!

【问题讨论】:

  • @ÁlvaroG.Vicario 你应该回答。
  • 不懂这种语言,但它可能会将它们作为字符串进行比较
  • “90”大于“100”,因为“9”的ascii值高于“1”。
  • 您知道,jQuery 不是一种语言。你正在用 JavaScript 编程。
  • @Diodeus 我不确定这里的“ascii”是否准确。

标签: javascript


【解决方案1】:

使用parseInt()

属性会抛出字符串。所以当你尝试比较它们时......你实际上是在比较

"100" &gt; "90" 而不是 100 &gt; 90 .. 使用 parseInt()基数 应该可以解决您的问题..

var score1 = parseInt( $(this).attr('data-score1') , 10);
var score2 = parseInt( $(this).attr('data-score2') , 10);

if (score1 < score2) {
  // do some
}
else if (score2 > score1) {
  // do something else
}

正如@naveen 建议的那样,您也可以这样做

var score1 = +$(this).attr('data-score1');
var score2 = +$(this).attr('data-score2');

【讨论】:

  • 老兄,+$(this).attr('data-score1') 会做
  • @webarto 这将使它成为 score1 >= score2
  • @webarto : 可能会打成平手
  • @naveen parseInt() 更具可读性。如果您追求简短(出于某种原因),当然可以使用+
  • @naveen 你可能知道也可能不知道在 Javascript 一元 + 中转换为数字。如果您看到parseInt(),您已经知道它的作用。如果没有,您有一个要搜索的函数名称。我的意思是,是的,你知道这个技巧很聪明,但你真的想在其他人会阅读的代码中使用它吗?
【解决方案2】:

您将值作为字符串进行比较。字符串“90”以9开头,其ascii码大于1

您可以使用parseInt将其转换为数字

parseInt(score1, 10)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多