& # 39;未定义# 39;数组循环+字符的意外

'undefined' Unexpected on Array Loop + charAt

本文关键字:字符 意外 数组 未定义 循环      更新时间:2023-09-26

在此代码中,我逐行编写文本区域的每个单词,由空白分隔,但在最后一个单词undefined出现,我不知道为什么

window.onload = function() {
  var btn2 = document.getElementById("separar");
  btn2.addEventListener("click", function() {
    palavrasSeparadas();
  }, false);
}
var c = new Array();
function palavrasSeparadas() {
  var t2 = document.getElementById("texto").value;
  for (var i = 0; i < t2.length; i++) {
    //charAt retorna o caracter daquela posição
    c[i] = t2.charAt(i);
  }
  var conteudo = "";
  for (var j = 0; j <= c.length; j++) {
    if (c[j] != ' ') {
      conteudo += c[j];
    } else {
      conteudo += "<br>"
    }
  }
  document.getElementById("msgS").innerHTML = conteudo;
}
<form id="form1" name="form1" method="post" action="">
  <textarea id="texto" name="texto"></textarea>
  <br>
  <input type="button" id="separar" name="separar" value="Separação">
</form>
<br>
<div id="msgS"></div>
<br>

您的循环超出了一个值。在最后一次循环执行j <= c.length时,当j = c.length时,您尝试在c.length处访问c。但是,由于数组索引从0开始,您的数组只有c.length-1长。在循环中使用j < c.length

    for (var j = 0; j < c.length; j++) {
        if (c[j] != ' ') {
            conteudo += c[j];
        }else {
            conteudo += "<br>"
        }
    }

在第二个for循环中,您使用了小于或等于,而不仅仅是小于。因此,您还尝试以c.length打印索引,这是未定义的。相反,您应该这样写:

for (var j = 0; j < c.length; j++) {
    if (c[j] != ' ') {
        conteudo += c[j];
    }else {
        conteudo += "<br>"
    }

}