Javascript для цикла, который вычисляет квадратный корень всех чисел между двумя числами данных, добавленный через форму

Работает только с некоторыми числами, но не работает, например, когда я пытаюсь вставить 3-10. я не знаю, что не так. Я все еще изучаю Javascript. Извините за мой плохой английский. Благодарю вас

let btn = document.getElementById("btn")
let msg = document.getElementById("avvisi")

btn.addEventListener("click", () => {

  let primo = document.forms['modulo']['primonum'].value
  let secondo = document.forms['modulo']['secondonum'].value




  for (let i = primo; i <= secondo; i++) {

    console.log(i * i)
  }

})
<form id="modulo">
  inizio <input type="text" id="primonum"> fine <input type="text" id="secondonum">
  <input type="button" id="btn" value="go">
</form>


person Cecca86    schedule 14.02.2021    source источник
comment
Для меня это работает, где это терпит неудачу?   -  person Aalexander    schedule 14.02.2021
comment
Что именно должна делать ваша программа? Кажется, вы говорите, что хотите напечатать квадратный корень для каждого числа между двумя числами, но вы просто печатаете квадраты каждого числа между двумя выбранными вами числами?   -  person Da Mahdi03    schedule 14.02.2021
comment
Да, это то, что я хотел бы сделать. Но кажется, что он отлично работает только с некоторыми числами, если я попытаюсь поставить 3 в качестве начального числа и 10 в качестве конечного числа, он ничего не напечатает.   -  person Cecca86    schedule 14.02.2021
comment
Я хотел бы понять, почему, если я поставлю 1 и 10, все будет работать нормально, а если я поставлю 3 и 10, то вообще не сработает, извините, если я не могу объяснить себя лучше   -  person Cecca86    schedule 14.02.2021


Ответы (2)


Вам нужно преобразовать строки из ввода в число. Самый короткий способ — использовать унарный плюс + перед выражением.

let btn = document.getElementById("btn");
let msg = document.getElementById("avvisi");

btn.addEventListener("click", () => {
    let primo = +document.forms['modulo']['primonum'].value
    let secondo = +document.forms['modulo']['secondonum'].value
    for (let i = primo; i <= secondo; i++) {
        console.log(i * i);
    }
});
<form id="modulo">
  inizio <input type="text" id="primonum"> fine <input type="text" id="secondonum">
  <input type="button" id="btn" value="go">
</form>

person Nina Scholz    schedule 14.02.2021
comment
Спасибо большое! Попробую так. Извините за мой английский, еще раз! - person Cecca86; 14.02.2021

primo и secondo являются строками, потому что они получены из ввода. Поэтому, когда вы устанавливаете i в primo, i также является строкой. При сравнении 3 с 10 3 больше 10 из-за их значений Unicode, и он пропускает цикл, потому что i <= secondo в этом случае ложно. Выполнение i*i может работать только с числами, поэтому javascript превращает их в числа, и это работает. Решение состояло бы в том, чтобы превратить строки в числа напрямую.

let primo = Number(document.forms['modulo']['primonum'].value);
let secondo = Number(document.forms['modulo']['secondonum'].value);

or

let primo = +document.forms['modulo']['primonum'].value;
let secondo = +document.forms['modulo']['secondonum'].value;
person lusc    schedule 14.02.2021
comment
Большое спасибо! - person Cecca86; 14.02.2021