'未定义'在Array Loop + charAt上意外

时间:2016-09-20 14:25:15

标签: javascript html

在这段代码中,我逐行写出textarea的每个单词,用空格分隔,但最后一个单词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;
}
&#13;
<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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

}

这是fencepost错误。