JavaScript字母字符查找器无限环路故障



我的任务是创建一个way循环,该循环计算用户写的句子中字母字符的数量。此功能只会计算字母字符的数量,没有特殊字符。我的问题是,当我添加特殊字符(包括数字)时,以一些随机给定的顺序(有时可以工作),它会使我的浏览器崩溃(它也会使您的浏览器崩溃,请小心!)。我不知道是什么原因引起的。

var chocolate = false;
var count = 0;
var characters = 0;
function letterCounter(){
  var sentence = document.getElementById('sentence').value;
  while(!chocolate){
    if (count==sentence.length) {
      var chocolate = true;
    }
    else if(sentence[count]=="a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"){
      count++;
      characters++;
    }
    else {
      count++;
    }
    document.getElementById('replaceTwo').innerHTML = characters;
}
}
Function 2: letter count finder<br>
      <textarea id="sentence"></textarea><br>
      <button onclick="letterCounter()">Find letters</button>
      <div id="replaceTwo"></div>

问题是变量 characterschocolatecount已在功能之外声明,并且该函数在它们上运行。因此,如果输入中有特殊字符,则该函数进入之后的无限循环

function letterCounter(){
    var sentence = document.getElementById('sentence').value;
    var chocolate = false;
    var count = 0;
    var characters = 0;
    while(!chocolate){
        if (count==sentence.length) {
	        chocolate = true;
        }
        else if(["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"].indexOf(sentence[count])!==-1){
	        count++;
            characters++;
        } else {
	        count++;
        }
 
    }
    console.log(characters)
}
Function 2: letter count finder<br>
      <textarea id="sentence"></textarea><br>
      <button onclick="letterCounter()">Find letters</button>
      <div id="replaceTwo"></div>

这不会崩溃并合并 @manuel-toto的修复。

这个

sentence[count]=="a","b","c",...

将无法正常工作。

您将必须将这些字母放入数组中检查该数组是否包含当前字母:

["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"].indexOf(sentence[count])!==-1

代码的问题是您在if中声明了新变量chocolate

if (count==sentence.length) {
  var chocolate = true;
}

这是一个工作解决方案,不会崩溃您的浏览器:)

var btn = document.getElementById('btn');
var sentence = document.getElementById('sentence');
var count = 0;
var re = /[a-z]/i;
btn.addEventListener('click', function() {
  count = 0;
  for (var i = 0; i < sentence.value.length; i++) {
    if (re.test(sentence.value[i])) {
      count++;
    }
  }
  document.getElementById('replaceTwo').innerHTML = count;
});
<p>Function 2: letter count finder</p>
<textarea id="sentence"></textarea>
<button type="button" id="btn">Find letters</button>
<div id="replaceTwo"></div>

最新更新