【问题标题】:Having trouble with an if/else statementif/else 语句有问题
【发布时间】:2017-04-12 18:11:08
【问题描述】:

我正在尝试编写一个名为 isVowel 的函数,该函数接受一个字符(即长度为 1 的字符串),如果它是元音、大写或小写,则返回“true”。如果字符不是元音,函数应该返回“false”。

这似乎应该有效,但无论我输入什么字母,它都会返回“true”。我尝试了很多不同的方法,但都碰壁了。

function isVowel(x){
  if (x === "a" || "A" || "e" || "E" || "i" || "I"|| "o" || "O" || "u" || "U" || "y" || "Y"){
    //console.log(x); // returns c
    return true
  } else {
    return false
  }
};
console.log(isVowel("c"));

【问题讨论】:

  • x === "a" || x === "A" || ....
  • 我确定你需要 x === 在所有可能性上。如有错误请指正。
  • == 运算符将在进行任何必要的类型转换后比较是否相等。 === 运算符不会进行转换,因此如果两个值不同类型 === 将简单地返回 false。两者都同样快。只要操作数的类型和值严格相同,就养成使用===比较运算符的习惯。它将避免不必要的幕后问题。

标签: javascript function


【解决方案1】:

为了进一步简化您的代码,您可以创建一个有效值数组,并简单地检查它们传入的值是否包含在有效值列表中。

function isVowel(x) {
  var vowels = ["a", "e", "i", "o", "u", "y"];
  return vowels.indexOf(x.toLowerCase()) > -1;
};
console.log(isVowel("a"));

【讨论】:

  • 这是我认为最简洁的答案。
【解决方案2】:

以下是您的函数的改进和更正版本:

我们不是检查大写和小写的所有条件,而是先转换为小写,然后使用x == a/e/i/o/u 进行检查。

function isVowel(x)
{
  x = x.toLowerCase();
  if (x === "a" || x == "e" || x == "i" || x == "o" || x == "u"){
    return true
  } else {
    return false
  }
};
console.log(isVowel("a"));

@yBrodsky 建议的更好方法是:

function isVowel(x)
{
  var vowels = ['a', 'e', 'i', 'o', 'u'];
  
  return vowels.indexOf(x.toLowerCase()) != -1;
};
console.log(isVowel("a"));

【讨论】:

  • 非常感谢。
  • @CraigCarter 社区成员给你的每个答案旁边都会有一个勾号,你需要点击对你有帮助的答案旁边的勾号。请阅读*.com/help/someone-answers
【解决方案3】:

您可以使用/[a|e|i|o|u]/i.test(YOURTEXTHERE)

以下是完成此任务的单个班轮:

var YOURTEXTHERE = 'b';

// check if it's vowel
if (/[a|e|i|o|u]/i.test(YOURTEXTHERE)) {
  console.log('vowel!');
}
else
  console.log('not vowel');

【讨论】:

    【解决方案4】:

    您对|| 运算符的使用不正确。您的代码当前正在评估 x === "a",然后是 "A",这始终是一个真实值。您要么需要使用这样的比较列表:

    if (x === "a" || x === "A" || x === "o" || ...) {...}
    

    或类似的东西(更整洁,faster):

    if (['a', 'e', 'i', 'o', 'u'].indexOf(x.toLowerCase())) {...}
    

    【讨论】:

    • 这很有帮助。非常感谢!
    • 如果我的回答对你有帮助,请使用绿色复选标记让人们知道!
    【解决方案5】:

    你只是在比较 x == "a",你需要有 x=="A"||x=="o" 等等。

    【讨论】:

      【解决方案6】:

      干净的版本可能是:

      function isVowel(x) {
        return (['a', 'e', 'i', 'o', 'u', 'y'].indexOf(x.toLowerCase()) > -1);
      };
      
      console.log(isVowel("c"));
      console.log(isVowel("a"));
      console.log(isVowel("A"));

      【讨论】:

        【解决方案7】:

        当您传入长度为1 的字符串时,您可以使用String.includes 进行简单比较。根本不需要任何数组。

        function isVowel(x){
          return 'aeiouy'.includes( x.toLowerCase() );
        };
        
        console.log( isVowel("c") ); // false
        console.log( isVowel("e") ); // true

        【讨论】:

          【解决方案8】:

          也许一种不同的方法和更清洁的解决方案可能会更好,如下所示。

          function isVowel(character) {
          
            // Clean the character to eliminate errors with capital letters
            let cleanedChar = character.toLowerCase();
          
            // Check if the cleaned character which is now any lower case letter matches a vowel
            if (cleanedChar.match(/[aeiou]/g)) {
              // Return true if it does
              return true;
            }
          
            // return false if ever get to this point (it means the char was not a vowel)
            return false;
          }
          
          // Call isVowel function and pass it 'c'
          console.log(isVowel('c'));
          

          【讨论】: