if if语句在javascript中无法正常工作

时间:2014-08-28 17:20:59

标签: javascript jquery angularjs javascript-events

从这段代码中可以看出:

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条件。 知道为什么会这样吗?

3 个答案:

答案 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