JavaScript中用随机数补全变量长度失效问题求助
问题解决:循环仅执行一次的原因及修正方案
问题根源
你的代码中input是数字类型,而数字没有length属性,因此input.length会返回undefined。在while(input.length < 5)的判断中,undefined < 5的结果为false(因为undefined转换为数字是NaN,NaN与任何值比较都会返回false),导致循环仅执行一次就终止。
修正方案
以下两种方案均可解决问题,根据你的需求选择:
方案1:转为字符串处理(直观易读)
将数字转为字符串,通过字符串长度判断是否补全,拼接随机数后可再转回数字:
let input = 5; // 假设初始输入是数字 input = String(input); // 转为字符串 if (input.length < 5) { do { // 生成1-9的随机数并转为字符串拼接 input += Math.floor(Math.random() * 9) + 1; } while (input.length < 5); } input = Number(input); // 转回数字(若不需要数字类型可省略) console.log(input);
方案2:基于数值范围判断(纯数字运算)
利用5位数的最小值是10000,通过判断数值是否小于10000来循环补全:
let input = 5; if (input < 10000) { do { input = input * 10 + Math.floor(Math.random() * 9) + 1; } while (input < 10000); } console.log(input);
补充说明
你之前尝试给input.length创建变量的做法无效,本质原因是数字类型本身不存在length属性,变量会被赋值为undefined,无法正确作为循环条件。
内容的提问来源于stack exchange,提问作者Stanley
相关产品推荐
相关产品推荐

