Javascript, сравнивающий число, полученное из свойства Object как String
Я застрял на несколько часов в странной ситуации, когда одно числовое свойство 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);
Когда я запускаю это, третье предупреждение отображает "ложь". Для меня это ясно должно отображать "правда". Я явно что-то упускаю.
Я часами гуглял об этом и вижу, что большинство из них связано с несоответствием типов. Как видите, я явно конвертирую их оба в String, поэтому здесь проблем не должно быть.
3 ответа
Используя: "thisVal === restoreVal : " + thisVal
вы конкатинируете строку, поэтому вы сравниваете "thisVal === restoreVal : 65"
с "65"
Проблема возникает в последнем предупреждении в вашем коде, которое вы должны заключить в скобки вокруг оператора после оператора +, например:
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 перед его оценкой.
Исправьте ваш код
alert("thisVal === restoreVal : " + (thisVal === restoreVal));
потому что в вашем варианте вы сравниваете ""thisVal === restoreVal: 65"и"65" - они не равны