Javascript 大写元音:包含变量使If语句行为异常

Javascript 大写元音:包含变量使If语句行为异常,javascript,if-statement,Javascript,If Statement,我一直在试着解决一些编码红细胞的问题,在那里我遇到了大写元音的问题。当我在if语句中包含变量“matchTheChar”时,代码会给我一个奇怪的值 function VowelCount(str) { var results=0; var str=str.toLowerCase(); var matchTheChar= str.charAt(i); myRegExp=/[aeiou]/; for (var i=0; i<str.length; i++){ if

我一直在试着解决一些编码红细胞的问题,在那里我遇到了大写元音的问题。当我在if语句中包含变量“matchTheChar”时,代码会给我一个奇怪的值

function VowelCount(str) { 
  var results=0;
  var str=str.toLowerCase();
  var matchTheChar= str.charAt(i);
  myRegExp=/[aeiou]/;
  for (var i=0; i<str.length; i++){
    if (myRegExp.test(matchTheChar)){
      results=results+1;
    }

  }  
  return results; 

}
函数元音计数(str){
var结果=0;
var str=str.toLowerCase();
var matchTheChar=str.charAt(i);
myRegExp=/[aeiou]/;
对于(var i=0;i您的

var matchTheChar= str.charAt(i);
之前,将任何值赋给
i
,并在循环之外。这意味着它基本上是:

var matchTheChar= str.charAt(undefined);
…这将为您提供第一个字符*。然后您将重复测试循环中的第一个字符,因为您从未为
匹配CHAR
指定新值

只需在循环内设置
匹配CHAR

function VowelCount(str) { 
  var results=0;
  var str=str.toLowerCase();
  var matchTheChar;
  myRegExp=/[aeiou]/;
  for (var i=0; i<str.length; i++){
    matchTheChar= str.charAt(i);       // <===
    if (myRegExp.test(matchTheChar)){
      results=results+1;
    }

  }  
  return results; 
}
函数元音计数(str){
var结果=0;
var str=str.toLowerCase();
var-matchthecar;
myRegExp=/[aeiou]/;

对于(var i=0;i在您的第一个代码段中,您只运行了一次
str.charAt(i)
,此时
i
是未定义的。在您的第二个代码段中,您在循环中每个字符调用它一次。

非常棒的答案。同样感谢您对我的代码提出的额外建议,我们将相应地实现它。
function VowelCount(str) { 
  var results=0;
  var str=str.toLowerCase();
  var matchTheChar;
  myRegExp=/[aeiou]/;
  for (var i=0; i<str.length; i++){
    matchTheChar= str.charAt(i);       // <===
    if (myRegExp.test(matchTheChar)){
      results=results+1;
    }

  }  
  return results; 
}