javascript字母字符查找器无限循环故障

时间:2019-03-04 19:52:42

标签: javascript

我的任务是创建一个while循环,计算用户编写的句子中字母个字符的数量。此功能仅计算字母字符的数量,不计算特殊字符。我的问题是,当我以某种随机给定的顺序添加特殊字符(包括数字)时(有时会起作用),它会使我的浏览器崩溃(请注意,它也会使您的浏览器崩溃!)。我不知道是什么原因造成的。

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>

3 个答案:

答案 0 :(得分:3)

问题在于变量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-otto的修复程序。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

代码的问题是,您在chocolate内声明了一个新变量if

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>