从这段代码中可以看出:
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 = '';
}
}
}
由于某种原因,if else语句无法正常工作,因为您可以看到 answer 值是oro并且它应该在第一个if上停止,但是当它在第一个if条件时它会比较值和它向前移动,假设它不是相同的值,并且由于某些其他原因,即使值不同,它也会进入第二个if条件。 知道为什么会这样吗?
答案 0 :(得分:4)
您错误地检查answer
是否包含字符串。 .indexOf()
将返回字符串中的位置。它可能是0
,这是字符串的开头(它就像一个数组,它是零索引的)。如果找不到,则返回-1
。
如果您只是if(answer.toLowerCase().indexOf('oro'))
,那么它将是false
,因为0
是“错误的”。
您想要:if(answer.toLowerCase().indexOf('oro') >= 0)
。
您确定首先要使用indexOf()
吗?这是检查字符串“是否包含”oro
。您确定不仅仅需要:if(answer.toLowerCase() === 'oro')
吗?
答案 1 :(得分:2)
indexOf返回0,0是一个假值,因此它没有进入条件。应该是:
.indexOf('oro') > -1
与其他条件相同
答案 2 :(得分:1)
您正在使用indexOf查找字符串中是否存在“oro”。但是,IndexOf正确返回值0,在JavaScript中等于false。我个人会使用answer.indexOf('oro') !== -1
。