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 ......
另外,有没有办法重构这段代码?我不想为每一个新情况重复自己..
答案 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;
}