我有一个If语句不起作用,但在逻辑上是正确的

时间:2014-03-27 11:41:12

标签: javascript arrays if-statement

if ("tester" == findrange[117])
{
  var indict = 34;
}
if (keeperval[39] == "tester")
{
  var indict2 = 45;
}
if (keeperval[39] == findrange[117])
{
  var indict3 = 56;
}

当调试将返回这些值时,将返回此代码:

indict = 34

indict2 = 45

indict3 = undefined

这有什么意义吗?我无法理解为什么这可能不起作用!

4 个答案:

答案 0 :(得分:3)

您可能会将findrange[117]keeperval[39]中的字符串包裹在String中,而不是简单地使用文字。

因此,两者都不是字符串,而是字符串对象。当您在与字符串进行比较时使用它们时,它将使用对象的.toString(),因此== "tester"将起作用。

但是,当相等比较的两边都是对象时,当且仅当两个对象实际上是相同时,结果才为真:

var s1 = new String("test");
var s2 = new String("test");
console.log(s1 == s2); // logs false

所以而不是

findrange[117] = new String("tester");
keeperval[39] = new String("tester");

使用

findrange[117] = "tester";
keeperval[39] = "tester";

更好的是,将您的相等测试与类型安全的相等测试交换:

if ("tester" === findrange[117])
{
  var indict = 34;
}
if (keeperval[39] === "tester")
{
  var indict2 = 45;
}
if (keeperval[39] === findrange[117])
{
  var indict3 = 56;
}

然后你会立即看到有些东西掉了。 (fiddle

有关进一步参考,请参阅MDN的JavaScript guide,尤其是sameness in JavaScript

编辑:如果您无法更改数组中值的类型,请在比较之前使用.toString()方法:

if ("tester" === findrange[117].toString())
{
  var indict = 34;
}
if (keeperval[39].toString() === "tester")
{
  var indict2 = 45;
}
if (keeperval[39].toString() === findrange[117].toString())
{
  var indict3 = 56;
}

答案 1 :(得分:0)

使用

  

keeperval [39] === findrange [117]

了解它们是否都是对象或字符串。

答案 2 :(得分:0)

尝试groovy控制台:

def findrange = ["tester","nontester"]

def keeperval = ["tester"]

if ("tester" == findrange[0])
{
  def indict = 34;
println indict

}
if (keeperval[0] == "tester")
{
  def indict2 = 45;
println indict2
}
if (keeperval[0] == findrange[0])
{
  def indict3 = 56;

  println indict3

}

output : 34 45 56

答案 3 :(得分:0)

首先检查类型 的console.log(typeof运算(findrange [117]));

在你的情况下,这应该是一个对象

在JS中,

将obj与string进行比较;将obj.value与字符串值

进行比较

将obj与obj进行比较;将比较对象的引用而不是值