我在一个奇怪的情况下被困了几个小时,从服务器收到的JSON的一个数字属性未通过简单的相等测试。
var form = {'answer':'','categoryDisplay':'dbAdmin','creationDate':null,'id':0,'question':'','techJobDisplay':null,'techJobId':65};
var selTechJobId = form.techJobId;
var thisVal = String(65);
var restoreVal = String(selTechJobId);
alert("thisVal : " + thisVal + " | typeof thisVal : " + typeof thisVal);
alert("restoreVal : " + restoreVal + " | typeof restoreVal : " + typeof restoreVal);
alert("thisVal === restoreVal : " + thisVal === restoreVal);
当我运行时,第三个警告显示" false"。对我来说,显然应该显示" true"。我显然错过了一些东西。
我已经在谷歌上搜索了几个小时,我发现其中大部分是关于类型不匹配的问题。正如您所看到的,我明确地将它们都转换为String,因此它不应该成为问题。
答案 0 :(得分:2)
使用:"thisVal === restoreVal : " + thisVal
您正在连接字符串,因此您要将"thisVal === restoreVal : 65"
与"65"
进行比较
答案 1 :(得分:1)
问题发生在代码中的最后一个警告中,您必须在语句周围括起来 在这样的+运算符之后:
var form = {'answer':'','categoryDisplay':'dbAdmin','creationDate':null,'id':0,'question':'','techJobDisplay':null,'techJobId':65};
var selTechJobId = form.techJobId;
var thisVal = String(65);
var restoreVal = String(selTechJobId);
alert("thisVal : " + thisVal + " | typeof thisVal : " + typeof thisVal);
alert("restoreVal : " + restoreVal + " | typeof restoreVal : " + typeof restoreVal);
alert("thisVal === restoreVal : " + (thisVal === restoreVal));
这样它就不会尝试将表达式的第一部分的值添加到thisVal之前 评估它
答案 2 :(得分:0)
修复您的代码
alert("thisVal === restoreVal : " + (thisVal === restoreVal));
因为在你的变体中你比较"" thisVal === restoreVal:65"和" 65" - 他们不平等