我的任务是创建一个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>
答案 0 :(得分:3)
问题在于变量characters
,chocolate
和count
已在函数外部声明,并且函数对其进行操作。
因此,如果输入中包含前导特殊字符,则该函数会在第一次调用后 进入无限循环。
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>