![](/img/trans.png)
[英]check if two values are meaningfully equal using === not working in javascript
[英]javascript says two values are not equal when they are (using ===)
我想使用JavaScript来确定许多div(称为div1,div2 ... up至div21)是哪种类/显示颜色取决于schedule_array中的值。 因此,如果在schedule_array中有2个,我希望div2是单击的类,如果在schedule_array中不是3,则希望div3是未单击的类。 问题是无论此代码如何,我的===符号似乎都为假:
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之类的东西也应为true,因此即使正在进行一些奇怪的输入,也不应影响结果。
问题:这种怪异是怎么回事? 我究竟做错了什么?
这对我有用。
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
是数组吗?
您正在使用===
这是一个不带转换的等式( 严格等式 )。 这意味着,尽管数值相同(相等),但严格相等运算符并未将String强制转换为Integer以允许进行此比较。 切换到非严格相等运算符==
应该可以解决您的问题,因为它将把String转换为Integer,从而使比较按预期进行。
您可能需要查看这两个运算符的JavaScript真值表 ,以了解它们的工作原理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.