这个简单的代码可以帮助我吗?

时间:2012-02-22 02:07:07

标签: javascript

function isVowel(char){

    if(typeof char == 'string' && char.length > 1){
        console.log('not a char');
        return 'not a char';
    } else {
        if (char.toLowerCase() === ('a'||'e'||'i'||'o'||'u')){
            console.log(char, true);
            return true;
        } else {
            console.log(char, false);
            return false;
        }
    }
}

document.writeln(isVowel('a'));
document.writeln(isVowel('e'));
document.writeln(isVowel('l'));

结果是:true,false,false;

它应该是:true,true,false;

任何人都可以帮助我为什么会这样吗?

我刚刚学习JavaScript ......

另外,有没有办法重构这段代码?我不想为每一个新情况重复自己..

4 个答案:

答案 0 :(得分:4)

你需要像这样分开||

char.toLowerCase() === 'a'
|| char.toLowerCase() === 'e'
|| char.toLowerCase() === 'i'
|| char.toLowerCase() === 'o'
|| char.toLowerCase() === 'u'

而不是像这样:

char.toLowerCase() === ('a'||'e'||'i'||'o'||'u')

以上是jsFiddle:

答案 1 :(得分:3)

('a'||'e'||'i'||'o'||'u')等于"a"

要确认上述内容,只需使用控制台尝试,或:

console.log(('a'||'e'||'i'||'o'||'u'));

我的建议:

' aeiou'.indexOf(char) > 0

完整版:

function isVowel(char){

    if(typeof char == 'string' && char.length > 1){
        console.log('not a char');
        return 'not a char';
    } else {
        if (' aeiou'.indexOf(char) > 0){
            console.log(char, true);
            return true;
        } else {
            console.log(char, false);
            return false;
        }
    }
}

document.writeln(isVowel('a'));
document.writeln(isVowel('e'));
document.writeln(isVowel('l'));

重构版本:

function isVowel(char)
{
    return ((typeof char == 'string') && (char.length == 1) && ('aeiou'.indexOf(char.toLowerCase()) != -1));
}

答案 2 :(得分:3)

    if (/[aeiou]/.test(char.toLowerCase())){
      // ...
    } else {
      // ...
    }

答案 3 :(得分:2)

问题出在这里

if (char.toLowerCase() === ('a'||'e'||'i'||'o'||'u'))

平等运营商不“分发”,你必须独立测试每种可能性的输入。一个简洁的解决方案可能是

if ("aeiou".indexOf(char.toLowerCase()) + 1) {
    console.log(char, true);
    return true;
}