Почему случайная переменная возвращает только 1 символ

Привет, ребята, я пытаюсь сгенерировать случайный пароль, используя клавиши верхнего и нижнего регистра + цифры. код, кажется, работает, но вместо того, чтобы возвращать 20 символов, он возвращает только 1. Возврат кажется случайным. Элемент должен быть заменен, почему случайный пароль каждый раз, когда нажимается кнопка.

HTML

<button id = "button5" onclick = "password()">Generate password </button> 
<p4 id = "p4" > Your password will apear here </p4>
 

Это Javascript

function password (length ) {
var ranpassword = "";
var chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"


var charalength = chara.length // there is an outside variable defining charalength = ""; I could not include that here 
for (var i = 0; <length ; i++) {
ranpassword +=  chara.charAt(Math.floor(Math.random() *
chara.length));
return ranpassword;

}
document.getElementById("p4").innerHTML = "hello there " + ranpassword;
console.info(password(20));

}

всякий раз, когда нажимается кнопка, в console.info возвращается одна случайная буква, и я не могу понять, почему? Кто-нибудь может сказать мне, почему? Любая помощь будет здорово. Спасибо :)

Честно говоря, 1 символ впечатляет, учитывая, что ваш цикл for должен был вызвать ошибку for (var i = 0; <length ; i++) . Вам не хватает i в сравнении.

Locke 20.03.2022 08:39

Что ты имеешь в виду ? где я могу включить сравнение "i" в ?

aguywithquestions 20.03.2022 08:40

потому что у вас есть returnв тело цикла ... Сделайте правильный отступ, и вы увидите проблему ...

derpirscher 20.03.2022 08:44

вынул обратку и теперь работает

aguywithquestions 20.03.2022 08:48

И у вас синтаксическая ошибка в объявлении цикла (но это может быть только опечатка) for (var i = 0; ***i is missing here*** < length; i++)

derpirscher 20.03.2022 08:49

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

aguywithquestions 20.03.2022 08:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
40
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы сделали какую-то ошибку. Попробуйте этот код,

function password (length) {
    let ranpassword = "",
        chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        charalength = chara.length;

    for (var i = 0; i<length ; i++) {
        ranpassword +=  chara.charAt(Math.floor(Math.random() *
        chara.length));
    }

    document.getElementById("p4").innerHTML = "hello there " + ranpassword;
}
<button id = "button5" onclick = "password(20)">Generate password </button> 
<p4 id = "p4" > Your password will apear here </p4>

спасибо, я на самом деле понял это за 2 секунды до того, как вы написали. Выдает ошибку, что превышен размер стека вызовов, но все равно работает. Благодарю вас !

aguywithquestions 20.03.2022 08:49

@aguywithquestions Хорошо, отлично!

Jaydeep Mor 20.03.2022 08:51

Помимо частично неправильной реализации вашей функции password, вы не передаете функцию length в password() в своем обработчике onclick.
Вам нужно пройти length, а также password(20):

<button id = "button5" onclick = "password(20)">Generate password </button> 

ооо ок, я не знал, спасибо

aguywithquestions 20.03.2022 08:52

как сказал @Locke, ваш синтаксис цикла for неверен, так как вы отсутствуете i в сравнении. Кроме того, ваш код заполнен опечатками. Вы не закрыли цикл for, и вам не нужно было возвращаться ranpassword. Теперь ваш код работает, обратите внимание, что число, которое я указал в качестве параметра в onclick в HTML, является длиной вашего пароля. Кроме того, вместо использования .chatAt я генерирую случайное число и добавляю его к ranpassword. Например: цикл for получает chara[4], поэтому randpassword имеет 5-ю букву chara.

function password(length) {
  var ranpassword = "";
  var chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"


  var charalength = chara.length // there is an outside variable defining charalength = ""; I could not include that here 
  for (var i = 0; i < length; i++) {
    ranpassword += chara[(Math.floor(Math.random() *
      chara.length))];
  }
  document.getElementById("p4").innerHTML = "hello there " + ranpassword;
}
<button id = "button5" onclick = "password(4)">Generate password </button> 
<p4 id = "p4" > Your password will apear here </p4>
 

я исправил проблему

function password(length) {
  var ranpassword = "";
  var chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var charalength = chara.length;

  for (var i = 0; i < length; i++) {
    ranpassword += chara.charAt(Math.floor(Math.random() * chara.length));
  }
  return ranpassword;
}

console.info(password(5));

вы возвращали пароль из цикла, поэтому он возвращал один символ

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