Javascript 我的作业中存在无限循环错误;don';我不知道如何修理
我的任务是使用while循环创建一个函数,将一个句子中的所有e转换为3,将所有a转换为4黑客说。我的函数现在将浏览器置于无限循环中。我不知道我做错了什么Javascript 我的作业中存在无限循环错误;don';我不知道如何修理,javascript,Javascript,我的任务是使用while循环创建一个函数,将一个句子中的所有e转换为3,将所有a转换为4黑客说。我的函数现在将浏览器置于无限循环中。我不知道我做错了什么 函数hackerSpeak(){ var sentence2=document.getElementById('sentence2').value; var milk=假; var计数=0; 而(!牛奶){ if(计数==语句2.值){ 牛奶=真的; }else if(第2句charCodeAt(计数)=“e”){ 句子2.替换(计数,“3”
函数hackerSpeak(){
var sentence2=document.getElementById('sentence2').value;
var milk=假;
var计数=0;
而(!牛奶){
if(计数==语句2.值){
牛奶=真的;
}else if(第2句charCodeAt(计数)=“e”){
句子2.替换(计数,“3”)
计数++;
}else if(第2句charCodeAt(计数)=“a”){
第2句替换(计数,“4”)
计数++;
}否则{
计数++;
}
}
document.getElementById('replacetThree')。innerHTML=sentence2;
}
功能3:黑客语言
转换
我能看到的唯一问题是退出while循环。相反
关于使用句子2.value,您可以将其与句子长度进行比较
请尝试下面的代码退出
if(counting==sentence2.length){
milk = true;
}
即使在replace函数中,它也不能与索引一起工作,您可以使用
if (sentence2.charCodeAt(counting) == "e") {
sentence2.replace("e", "3")
counting++;
} else if (sentence2.charCodeAt(counting) == "a") {
sentence2.replace("a", "4")
counting++;
} else {
counting++;
}
一旦计数器被更新,它将匹配句子2的长度并退出循环。你把它弄得太复杂了。JavaScript中的
replace
方法不将索引作为参数,但具有以下参数:string.replace(searchvalue,newvalue)
而且不需要使用循环来完成您所追求的任务
您正试图通过传递替换方法不支持的字符串中字符的索引来使用替换
不使用循环的简单解决方案
相反,为了满足您的需求,您应该使用以下脚本
Function 3: Hack speak<br>
<textarea id="sentence2" class="try"></textarea><br>
<button onclick="hackerSpeak()">Convert!</button>
<div id="replaceThree"></div>
<script>
function hackerSpeak(){
var sentence2 = document.getElementById('sentence2').value;
document.getElementById('replaceThree').innerHTML = sentence2.replace("a","4").replace("e","3");
}
</script>
随着新的替换出现,代码将变得越来越大和笨拙
// array of characters to replace and their replacments -
// easier to extend the array to include new values without
// forcing code become more aware
var hackerSwaps = [
['a', 'e', 'o'], // n00bspeak
['4', '3', '0'] // 1337sp34k
];
// args to function are id properties of sentence and output target
function hackerSpeak(sId, outId) {
// convenience reference
function get(eId) {return document.getElementById(eId);};
// split sentence into character array
var s = get(sId).value.split('');
// for each pair of items in the character swapping array
for (var j = 0; j < hackerSwaps[0].length; j++) {
var c = hackerSwaps[0][j]; // get n00b char
var h = hackerSwaps[1][j]; // get 1337 replacement
// for each character in sentence
for (var i = 0; i < s.length; i++) {
if (s[i] == c) s[i] = h;
}
}
// convert back to String and write to page
get(outId).innerHTML = s.join('');
};
//要替换的字符数组及其替换项-
//更容易扩展数组以包含新值,而无需
//强制代码变得更加敏感
var hackerSwaps=[
['a','e','o'],//n00bspeak
['4','3','0']//1337sp34k
];
//函数的参数是句子和输出目标的id属性
函数hackerSpeak(sId、outId){
//方便参考
函数get(eId){returndocument.getElementById(eId);};
//将句子拆分为字符数组
var s=get(sId).value.split(“”);
//对于字符交换数组中的每对项
对于(var j=0;j
对于HTML
<form>
<textarea id="sentence2" class="try">some content with 'a' and 'e' characters</textarea><br>
<input type="button" onclick="hackerSpeak('sentence2', 'replaceThree');" value="Convert!" />
<div id="replaceThree">nothing</div>
</form>
<p id="replaceThree"></p>
某些内容带有“a”和“e”字符
没有什么
您从未重新分配牛奶
或呼叫中断
听起来像是counting==sentence2。value
从来都不是true
。现在是使用浏览器调试工具的好时机。在代码中放置一个断点,并在执行时逐行遍历。计数
和语句2.value的值是多少?它们会随着时间而改变吗?你希望它们什么时候相等?为什么?if(counting==sentence2.value){
应该是if(counting==sentence2.length){
if(counting==sentence2.value){
应该是if(counting==sentence2.value.length){
实际上,您希望测试当前位置是否已到达字符串的末尾。因此,使用字符串的length属性返回字符串的长度sentence2
已经包含该值,您不需要编写sentence2.value
。还有许多其他问题,请参阅注释。
<form>
<textarea id="sentence2" class="try">some content with 'a' and 'e' characters</textarea><br>
<input type="button" onclick="hackerSpeak('sentence2', 'replaceThree');" value="Convert!" />
<div id="replaceThree">nothing</div>
</form>
<p id="replaceThree"></p>