我对网页设计和 Javascript 都很陌生。在设置我的第一个 Web 应用程序时,我遇到了一个我不明白的错误。它一定是我认为 Javascript 在网页中工作的方式,或者是我对循环一般不了解的东西。
我正在尝试使用 js 突出显示表格的最佳值(value)。只要该文件在我的电脑上本地运行,我就会生成随机值并一直按刷新按钮,直到出现错误。出于调试目的,我现在也使用 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');
最佳答案
正如@AndrewShmig所说,您正在将字符串与int进行比较,并且应该首先使用parseInt将innerHtml转换为int。 为了解释为什么不将其解析为 int 在您的情况下不起作用,
在第一次迭代中:
When comparing a string with a number, JavaScript will convert the string to a number when doing the comparison.
因此,“6555”> 0 将是 true,因为 6555 > 0,但现在您使用字符串“6555”分配 bestValue,并且它不再是 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 - JavaScript for 循环中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61862895/