【问题标题】:Can't figure out why if condition is falsely triggered despite correct values printed before and after尽管前后打印了正确的值,但无法弄清楚为什么条件被错误触发
【发布时间】:2022-11-24 00:13:13
【问题描述】:

我不明白为什么我的 if 条件错误地触发了 else,尽管使用的值应该触发 if 条件。

示例:previousduration:297 thisduration:66

尽管 previousduration 更大(并且在 if 条件之前和之后输出相同的值),它仍然进入 else 显示“更小”。

for (let n = 1; n <= totalslidesnr; ++ n){
  document.getElementById("durationrange"+n).addEventListener("input", function () {

    var prev = n-1;
var previousduration = document.getElementById("durationrange"+prev);
var thisduration = document.getElementById("durationrange"+n);

if (previousduration.value > thisduration.value) {
  console.log("larger");
  console.log("previousduration",previousduration.value);
  console.log("thisduration",thisduration.value);
}
else {
  console.log("smaller");
  console.log("previousduration",previousduration.value);
  console.log("thisduration",thisduration.value);
}

} }

【问题讨论】:

  • 我怀疑它们是作为字符串而不是数字进行比较的。
  • 在一个不相关的说明上:请用驼峰大小写写下你的变量名,例如previousDuration,或使用下划线分隔单词,例如previous_duration --- 这将使您的变量名称更易于阅读。

标签: javascript google-chrome-extension


【解决方案1】:

value 属性的类型是字符串,而不是数字。正如您在这里看到的(您可以在浏览器的控制台上自己尝试):

> "297" > "66"
false
> 297 > 66
true

您正在比较字符串而不是数字。

你应该将这些字符串转换成数字,也许是这样的:

> parseFloat("297") > parseFloat("66")
true

在这里你可以找到parseFloat()的文档

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多