【问题标题】:bug in forloop javascript [closed]for循环javascript中的错误[关闭]
【发布时间】:2020-09-03 20:32:52
【问题描述】:

我对网页设计和 Javascript 都很陌生。在设置我的第一个 Web 应用程序时,我遇到了一个我不理解的错误。它一定是我认为 Javascript 在网页中工作的方式,或者我一般不了解循环的方式。

我正在尝试使用 js 突出显示表格的最佳价值。只要文件在我的 PC 上本地运行,我就会生成随机值并一直按下刷新按钮,直到出现错误。出于调试目的,我现在也使用 console.log 功能,但我仍然不明白这是怎么回事...

非常感谢任何关于这个实际上非常简单的代码可能有问题的提示。

// Best value of the week
var table = document.getElementsByTagName('table')[0];
var bestValue = 0;
var bestRow = 0;

for (var i = 1; i < 22; i++) {

   if (table.rows[i].childNodes[5].innerHTML > bestValue){
       bestValue = table.rows[i].childNodes[5].innerHTML;

       console.log(i);
       console.log(table.rows[i].childNodes[5].innerHTML);
       console.log(bestValue);
       bestRow = i;
   }
   else{
       console.log(i);
       console.log(table.rows[i].childNodes[5].innerHTML);
       console.log(bestValue);
   }
}

table.rows[bestRow].childNodes[5].classList.add('bestofweek');

【问题讨论】:

  • 我认为如果您发布了 minimal reproducible example 来表示您的尝试,您会得到更多回复。现在代码太多,无法查看并提供任何帮助。
  • 什么错误?您已经解释了如何重现它,但没有说明问题所在。我看到了代码和屏幕截图,但没有明显错误。有控制台日志,但它们并没有真正帮助我。
  • 我将删除我认为对我的问题无用的代码。问题是我期望标记值最高,而 974 绝对不是这个表中最大的数字。
  • 您是在比较字符串,而不是整数。 "innerHTML" 返回字符串,而不是数字。只需添加 parseInt。

标签: javascript for-loop html-table


【解决方案1】:

您正在比较字符串,而不是整数。 innerHTML 返回字符串,而不是数字。

只需添加parseInt

if (parseInt(table.rows[i].childNodes[5].innerHTML) > bestValue){
       bestValue = parseInt(table.rows[i].childNodes[5].innerHTML);

【讨论】:

  • 是的!这解决了它,但现在请帮助我理解为什么它大部分时间都有效,为什么有时它没有?但是可以肯定的是,将 string 与 int 进行比较肯定会产生一些问题,但我希望一直存在问题。
【解决方案2】:

正如@AndrewShmig 所说,您正在将字符串与 int 进行比较,并且应该首先使用 parseInt 将 innerHtml 转换为 int。 为了解释为什么不将其解析为 int 在您的情况下不起作用,

在第一次迭代中:

当比较字符串和数字时,JavaScript 会在比较时将字符串转换为数字。

所以“6555”> 0 将作为 6555 > 0 为真,但现在您使用字符串“6555”分配最佳值,它不再是 int。

现在后续的比较是在两个字符串之间进行的,按字母顺序进行:

"451" > "6555" // false, because 6 comes after 4 alphabetically
"8995" > "6555" // true
"9359" > "8995" // true
// ...
"974" > "9359" // true, because 7 comes after 3 alphabetically
//...

现在你的最大值是错误的。

参考。 Javascript comparisons

【讨论】:

  • 非常感谢,现在一切都清楚了!
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 2017-02-19
  • 2015-08-09
  • 2017-06-25
  • 2023-03-07
  • 2021-12-20
  • 1970-01-01
相关资源
最近更新 更多