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
这有什么意义吗?我无法理解为什么这可能不起作用!
答案 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进行比较;将比较对象的引用而不是值