JavaScript 并非总是返回 false。

3
这是我的代码。控制台总是读取错误。发生了什么?我认为是在将文本框对象化时。

function compare() {
  var test = "test";
  var input = document.getElementById("input").value;
  var inputLen = input.length;
  var tick;
  for (tick = 0; tick < inputLen; tick++) {
    if (input[tick] != test[tick]) {
      break;
    }
  }
  if ((tick - 1) == test.length) {
    console.log("equal");
  } else {
    console.log("wrong");
  }
}
<input type="text" id="input" placeholder="text">
<input type="submit" id="submit" onclick="compare()">

我真的需要帮助。console.log 总是返回“错误”。


3
应该是 tick === test.length(因为在循环退出之前,tick 会最后一次递增)。 - 4castle
2
代码的目的是什么?看起来你正在测试两个字符串值是否相等,通过逐个比较它们的每个字母,但为什么不直接测试 input == test 呢?使用循环而不检查长度意味着输入 "testing" 将被视为等于你的 "test" 值。 - nnnnnn
@nnnnnn 我尝试了你的解决方案,但还是不起作用。 - user3851290
如果您只想测试两个字符串是否相等,您可以简单地编写 if (test == input) { console.log("equal") } else { console.log("wrong") }。不需要循环。除非您想进行不区分大小写的比较,否则就没有更多内容了,然后您只需编写 if (test == input.toLowerCase())(注意 test 已经是小写)。 - nnnnnn
@user3851290 for(i=0;i<3;i++);console.log(i); 输出 3。 - user1636522
显示剩余2条评论
2个回答

1
在执行for循环时,在退出循环前的最后一次迭代中,tick变量增加到5。为了解决这个问题,将其与test.length进行比较而不使用-1来减少它:

function compare() {
  var test = "test";
  var input = document.getElementById("input").value;
  var inputLen = input.length;
  var tick;
  for (tick = 0; tick < inputLen; tick++) {
    if (input[tick] != test[tick]) {
      break;
    }
  }
  // After exiting the loop, tick will be equal to 5, not 4.
  if (tick === test.length) {
    console.log("equal");
  } else {
    console.log("wrong");
  }
}
<input type="text" id="input" placeholder="text">
<input type="submit" id="submit" onclick="compare();">


-3

解决方案1

var test = "test";
var input = document.getElementById("input").value;
var inputLen = input.length;
var tick;

for (tick=0; tick < inputLen; tick++)
{
    if (input[tick]!=test[tick])
    {
        break;
    }          
}

if (tick==test.length)
{
   console.log("equal");
}
else
{
   console.log("wrong");
}

解决方案2

var test = "test";
var input = document.getElementById("input").value;
var inputLen = input.length;
var tick;

for (tick=1; tick <= inputLen; tick++)
{
   if (input[tick-1]!=test[tick-1])
   {
       break;
   }          
}

if ((tick - 1)==test.length)
{
   console.log("equal");
}
else
{
   console.log("wrong");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接