Javascript比较数字来自Object的属性作为String

时间:2014-11-01 12:58:06

标签: javascript json equality

我在一个奇怪的情况下被困了几个小时,从服务器收到的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,因此它不应该成为问题。

3 个答案:

答案 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" - 他们不平等

http://jsbin.com/dowihoqizi/1/