JavaScript 表示两个值不相等(使用 ===)
javascript says two values are not equal when they are (using ===)
我想使用 JavaScript 来确定哪个类/显示颜色的div(称为div1,div2...到div21) 取决于 schedule_array 中的值。因此,如果 2 在 schedule_array 中,我希望div2 属于被点击的类,如果 3 不在schedule_array中,我希望div3 属于未点击的类。问题是我的 === 符号似乎给出了 false,无论此代码如何:
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
是数组吗?
http://jsfiddle.net/kjruk00b/
您正在使用===
,它是没有转换的相等(严格相等)。这意味着,尽管数值相同(相等),但严格相等运算符不会强制将字符串转换为整数以允许进行此比较。切换到非严格相等运算符==
应该可以解决您的问题,因为它会将字符串转换为整数,从而使比较按预期工作。
查看这两个运算符的 Javascript 真值表以了解它们的工作原理可能是值得的。
相关文章:
- JSON.parse没有'不能使用Javascript
- 锚点元素不't使用svg时,请打开EDGE上的href
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 我不能使用变量作为javascript参数
- 在FF和IE中使用vimeo播放器的问题-加载flash播放器而不是使用HTML5播放器
- 历史向前/向后按钮不'不能使用angular 2路由器
- 为什么我的javascript脚本在页面加载时运行,而不是使用onclick
- 刷新GoogleMaps tile服务器可以使用JavaScript,但不能使用GWT
- JqueryUI对话框没有'不能使用特定的输入名称
- Mocha js测试字符串不相等时不显示diff
- click()不会'不能使用选项标记
- 取消img的css属性宽度和高度(不能使用“auto”)
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- 为什么我不能使用jQuery.parseJSON(json)解析json字符串
- Highcharts:格式化程序和点击功能don'不能使用Angular
- 递减progressbar,而不是使用javascript递增
- .on(“单击”,..)不处理使用相同的单击功能创建的对象
- 为什么这个while循环不能使用AND逻辑运算符
- JavaScript 表示两个值不相等(使用 ===)