2014-08-28 82 views
0

正如你可以从这个代码中看到:如果在javascript else语句不能正常工作

function setBodyClasses() { 
    var answer = $surveyAns.getAnswer('QUEST223'); 
    answer = 'oro'; 
    if(!surveyUtils.isNullOrWhiteSpace(answer)) { 
     if (answer.toLowerCase().indexOf('oro')) { 
      $scope.bodyClasses = 'vip_gold'; 
     } 
     else if (answer.toLowerCase().indexOf('platino')) { 
      $scope.bodyClasses = 'vip_platinum'; 
     } 
     else { 
      $scope.bodyClasses = ''; 
     } 
    } 
} 

出于某种原因,如果else语句无法正常工作,因为你可以看到答案值是奥罗和它应该停止在第一个if,但是当它在第一个if条件时比较值,并且假设它不是相同的值,并且由于某种其他原因,即使值不同,它也会进入第二个条件。 任何想法为什么发生这种情况?

+7

我们从截图看不到,添加代码。 – Mritunjay 2014-08-28 17:22:18

+2

请将您的代码作为文本发布,而不是图像。 – 2014-08-28 17:23:15

回答

4

您正在错误地检查answer是否包含字符串。 .indexOf()会返回你在字符串中的位置。它可能是0,这是字符串的开始(它就像一个数组,它是零索引的)。如果找不到,则返回-1

如果你只是做if(answer.toLowerCase().indexOf('oro'))它将是false,因为0是“虚构”。

您想做的事:if(answer.toLowerCase().indexOf('oro') >= 0)

您确定要首先使用indexOf()吗?这是检查字符串“是否包含”oro。你确定你不只需要:if(answer.toLowerCase() === 'oro')

+0

我需要检查字符串是否包含'oro'。谢谢 – Laziale 2014-08-28 17:45:47

2

indexOf正在返回0,并且0是一个虚假值,所以它没有进入条件。应该是:

.indexOf('oro') > -1 

同样的,其他条件

1

您正在使用的indexOf找到“奥罗”在字符串中的存在。但是,IndexOf会正确返回值0,这在JavaScript中等于false。我个人会使用answer.indexOf('oro') !== -1