JavaScript IF语句和While循环工作不正常

JavaScript IF语句和While循环工作不正常,javascript,if-statement,while-loop,password-generator,Javascript,If Statement,While Loop,Password Generator,好的,现在我已经能够通过向while循环添加Length属性来解决长度问题。但是,当我生成noSpecialCharacter()时,它会在生成的密码前面给出NaN 这就是功能: const noSpecialCharacters = () => { let password; for (let i = 0; i < askUser; i++) { let result3 = characterSet[randomCharacter()];

好的,现在我已经能够通过向while循环添加Length属性来解决长度问题。但是,当我生成noSpecialCharacter()时,它会在生成的密码前面给出NaN

这就是功能:

const noSpecialCharacters = () => {
    let password;
    for (let i = 0; i < askUser; i++) {
        let result3 = characterSet[randomCharacter()];
        password += result3;
    }
    return password;
}

    let askUser;
// create a function for prompts
const prompts = () => {
    const minLength = 8;
    const maxLength = 128;
    askUser = null
    while (askUser === null || askUser.length < minLength || askUser.length > maxLength) {
        // ask the user again
        askUser = prompt('Enter a password character length. Character length must be at least 8 and between 128.');
        let confirmSpecialCharacter;
        // if password is between length range
        if (askUser >= minLength && askUser <= maxLength) {
            // ask for special characters
            confirmSpecialCharacter = confirm('Would you like for your password to include special characters?');
            // if yes, call combine random
            let pass = confirmSpecialCharacter === true ? combineRandom() : noSpecialCharacters();

            alert(pass);
        }

    }

    return askUser;

}

prompts();
const noSpecialCharacters=()=>{
输入密码;
for(设i=0;i{
常数minLength=8;
常量maxLength=128;
askUser=null
而(askUser==null | | askUser.lengthmaxLength){
//再次询问用户
askUser=prompt('输入密码字符长度。字符长度必须至少为8且介于128之间');
让我们确认特殊的性格;
//如果密码在长度范围之间

如果检查长度时(askUser>=minLength&&askUser,请使用askUser.length 但根据这种逻辑,当用户输入第一次是正确的时,wile循环中的任何内容都不会运行

更好的方法是初始化askUser=null 并将while中的条件设置为:

while (askUser === null || askUser.length < minLength ||  askUser.length > maxLength)
while(askUser===null | | askUser.lengthmaxLength)
首先检查askUser是否为null

let askUser;
//为提示创建一个函数
常量提示=()=>{
常数minLength=8;
常量maxLength=128;
askUser=null
而(askUser==null | | askUser.lengthmaxLength){
//再次询问用户
askUser=prompt('输入密码字符长度。字符长度必须至少为8且介于128之间');
让我们确认特殊的性格;
//如果密码在长度范围之间

如果检查长度时(askUser.length>=minLength&&askUser.length,请使用askUser.length 但根据这种逻辑,当用户输入第一次是正确的时,wile循环中的任何内容都不会运行

更好的方法是初始化askUser=null 并将while中的条件设置为:

while (askUser === null || askUser.length < minLength ||  askUser.length > maxLength)
while(askUser===null | | askUser.lengthmaxLength)
首先检查askUser是否为null

let askUser;
//为提示创建一个函数
常量提示=()=>{
常数minLength=8;
常量maxLength=128;
askUser=null
而(askUser==null | | askUser.lengthmaxLength){
//再次询问用户
askUser=prompt('输入密码字符长度。字符长度必须至少为8且介于128之间');
让我们确认特殊的性格;
//如果密码在长度范围之间

如果(askUser.length>=minLength&&askUser.length处于while状态,则实际上没有检查
askUser
length。将其更改为此行:
while(askUser.lengthmaxLength){/..
它会工作。

在您的while条件下,您实际上没有检查
askUser
长度。将其更改为此行:
while(askUser.lengthmaxLength){/..
它会起作用。

因为人们通过在
askUser
中添加
.length
来解决您的问题,所以我建议您在
循环时,通过不断调用函数本身,直到通过验证,从而从
重构代码。(代码未经测试)

使用此方法,您可以通过
return
防止嵌套条件


由于人们通过在
askUser
中添加
.length
来解决您的问题,因此我建议您在
的同时,通过不断调用函数本身,直到通过验证,从而从
循环重新构建代码。(代码未经测试)

使用此方法,您可以通过
return
防止嵌套条件


为什么这么复杂?为什么要使用循环?因为我希望应用程序在密码长度不在范围内时重新编译用户。我尝试使用if语句,但在一次重新编译后停止了重新编译。confirm()返回布尔值,if(confirmSpecialCharacter==true)为什么这么复杂?为什么要使用循环?因为我希望应用程序在密码长度不在范围内时重新编译用户。我尝试使用if语句,但在一次重新编译后停止了重新编译。如果(confirmSpecialCharacter==true)比我快,confirm()将返回布尔值:)好的,我在while循环中添加了length属性,而不是if语句,它工作正常。但是,我的noSpecialChracters()的else语句工作不正常。它生成带有特殊字符的密码,但不是没有特殊字符的密码。我的逻辑是否有问题,我没有看到?confirm()返回一个布尔值,如果(confirmSpecialCharacter===true)比我快:)好的,所以我在while循环中添加了length属性,而不是if语句,它成功了工作不正常。它会生成带有特殊字符的密码,但不会生成没有特殊字符的密码。我的逻辑是否有问题,我没有看到?confirm()返回布尔值,如果(confirmSpecialCharacter==true)即使密码长度在rangeHmmm,它也会不断提示我,我在Chrome控制台中测试了
提示
部分,它工作正常。即使密码长度在rangeHmmm,它也会不断提示我,我在Chrome控制台中测试了
提示
部分,它工作正常。
// if yes, call combine random
let pass = confirmSpecialCharacter ? combineRandom() : noSpecialCharacters();