Почему этот цикл обращения строки выдает предупреждение nan при добавлении символов в мою переменную?

Я пытаюсь взять строку ввода, сделать ее перевернутой и предупредить об этом на экране. Но я получаю NaN в предупреждении.

Я беру входные данные и назначаю их переменной someText и преобразую их в обратную строку с помощью цикла for, назначаю их переменной newText и предупреждаю newText на экране.

Возможно, есть лучший способ сделать это, но я просто начал изучать JavaScript.

<h2>Is this word a palindrome?</h2>
<input id="entertext" type="text" placeholder="Enter Text">
<button id="submit">Enter</button>
<script type="text/javascript">
  document.getElementById("submit").onclick = function() {
    var someText = document.getElementById("entertext").value;
    var newText;

    for (i = someText.length; i >= 0; i--) {
      newText += someText[i];
      alert(newText);
    }
  }
</script>
newText - это вначале undefined, поскольку он ничем не инициализирован. Кроме того, ваш цикл начинается с неопределенного индекса. В someText.length нет индекса someText.
Sebastian Simon 10.08.2018 16:38

Почему бы не выполнить код в отладчике? @Xufox undefined + undefined - это NaN.

Raymond Chen 10.08.2018 16:38

@RaymondChen Ой, не понял, что петля начинается выходит за пределы поля.

Sebastian Simon 10.08.2018 16:40
2
3
42
2

Ответы 2

Вы пытаетесь получить доступ к персонажу, которого нет в someText. Потому что someText[someText.length] всегда есть undefined. Это должен быть i=someText.length-1. Также у newText должно быть какое-то начальное значение (пустая строка).

document.getElementById("submit").onclick = function (){
  var someText = document.getElementById("entertext").value;
  var newText='';
  for(i=someText.length-1; i>=0; i--){
      newText  += someText[i];
      alert(newText);
  }
}
<h2>Is this word a palindrome?</h2>
<input id="entertext" type="text" placeholder="Enter Text">
<button id="submit">Enter</button>

Спасибо. Это сработало. Я испортил длину и количество массивов.

new2programming 10.08.2018 17:12

@ new2programming, могу я попросить вас принять ответ, щелкнув галочку рядом с ответом, чтобы переключить его с серого на заполненный ........ спасибо.

Mamun 28.08.2018 17:25
  1. Вы используете += с неинициализированной переменной. Такая переменная начинается с undefined. Вы не хотите ничего добавлять в undefined, поэтому инициализируйте его. Если вы ожидаете строку, используйте var newText = "";.
  2. Ваш цикл начинается с i = someText.length, затем вы получаете доступ к someText[i]. Такого индекса не существует. Индексы варьируются от 0 до someText.length - 1 включительно. См. статья MDN об индексированных коллекциях. Поскольку несуществующие индексы возвращают undefined, именно здесь вводится undefined + undefined, что приводит к NaN.

Мелкие вещи:

  • Используйте addEventListener вместо присвоения свойству onclick.
  • Объявите i, чтобы не сделать его глобальным.

Так что либо используйте

document.getElementById("submit").addEventListener("click", function(){
  var someText = document.getElementById("entertext").value;
  var newText = "";

  for(let i = someText.length - 1; i >= 0; --i){
    newText += someText[i];
    alert(newText);
  }

  alert(`Palindrome? ${newText === someText}`); // To check whether it’s a palindrome.
});

или, с Array.prototype.reverse, просто

document.getElementById("submit").addEventListener("click", function(){
  const someText = document.getElementById("entertext").value;

  alert(`Palindrome? ${someText === [...someText].reverse().join("")}`);
});

Я попытался инициализировать var, но сначала он все равно не сработал из-за того, что не использовал -1 для длины. Спасибо вам за помощь.

new2programming 10.08.2018 17:13

Другие вопросы по теме