JavaScript中!=与||运算符逻辑异常:条件判断未按预期执行
问题出在逻辑运算符的误用上!
你这段代码的核心问题是条件判断的逻辑错误,咱们来拆解一下:
你写的条件是:
if(item.Id != "01" || item.Id !="02")
这个逻辑翻译成自然语言是:「如果Id不等于01 或者 不等于02」——但你想想,任何一个Id都不可能同时等于01和02,所以不管Id是01、02还是03,这个条件都会成立:
- 当Id是01时,它不等于02,满足
item.Id != "02",条件成立 - 当Id是02时,它不等于01,满足
item.Id != "01",条件成立 - 当Id是03时,两个都满足,条件当然成立
这就是为什么三个Id都弹出来了。
修正方案
你需要的是「既不等于01 也 不等于02」的逻辑,所以要把||(逻辑或)换成&&(逻辑与):
var data = "[{\"Id\":\"01\",\"Name\":\"01- Alabama\"},{\"Id\":\"02\",\"Name\":\"02- Arizona\"},{\"Id\":\"03\",\"Name\":\"03- Arkansas\"}]"; var myJson = JSON.parse(data); for (var key in myJson) { var item = { Id: myJson[key].Id, Name: myJson[key].Name }; // 这里把||换成&& if(item.Id != "01" && item.Id !="02") { alert(item.Id); } }
或者你也可以用反向逻辑,可读性可能更好:
if(!(item.Id === "01" || item.Id === "02")) { alert(item.Id); }
这个的意思是:「如果Id不是01 也不是 02」,和上面的逻辑是等价的。
这样修改后,就只会弹出"03"的提示框啦。
内容的提问来源于stack exchange,提问作者aman
相关产品推荐
相关产品推荐

