我想使用JavaScript来确定哪个类/显示颜色有多个div(称为div1,div2 ......直到div21)取决于schedule_array中的值。因此,如果2在schedule_array中,我希望div2被点击类,如果3不在schedule_array中,我希望div3属于类unlicked。问题是无论这段代码是什么,我的===符号似乎都是假的:
function setClasses()
{
alert("schedule array is "+schedule_array[3]);
for(var k = 1; k<22; k++)
{
var name = "div" + k;
if(contains(schedule_array, k))
{
document.getElementById(name).className = "clicked";
}
else
{
document.getElementById(name).className = "unclicked";
}
}
}
setClasses();
function contains(a, obj) {
//alert(a[3] + "for function contains");
//alert(a.length);
for (var i = 0; i < a.length; i++) {
document.write(a[i] + "=" + obj);
if (a[i] === obj) {
document.write("true,,,,,,,,");
return true;
}
else
{
document.write("false,,,,,,,,");
}
}
return false;
}
(stole this latter function from http://stackoverflow.com/questions/237104/array-containsobj-in-javascript)
我不知道为什么,但是即使我将相同的整数与自身进行比较,以下代码的==也会失败。例如,使用下面的代码,我得到如下输出:
21=21false,,,,,,
正如您所看到的,我已经检查过以确保schedule_array存在且具有有效数字。我还检查过以确保两个for循环都在运行。最后,我确认在js中,即使像“5”== 5这样的东西也应该是真的,所以即使有一些奇怪的打字,也不应该影响结果。
问题:这种奇怪的是什么?我做错了什么?
答案 0 :(得分:3)
这适合我。
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] == obj) {
return true;
}
}
return false;
}
alert(contains(['1', 2, 3, 4, 5], 1));
您确定a
是一个数组吗?
答案 1 :(得分:1)
您正在使用===
这是一个没有转化的平等(strict equality)。这意味着,尽管数值相同(相等),但严格相等运算符不会将String强制转换为整数以允许此比较发生。切换到非严格相等运算符==
应解决您的问题,因为它会将String转换为Integer,从而使比较能够按预期工作。
这两位运营商在查看Javascript truth tables时可能值得您了解它们的运作方式。