请问该JavaScript判断素数的算法是否有效,如何实现页面刷新自动运行?
代码有效性排查
你当前写的算法逻辑思路是对的,但存在多处语法和逻辑错误,无法正常运行,具体问题如下:
- while循环中
DD--的操作被放在了else分支里,仅当TV不能被DD整除时才会递减DD。如果遇到能整除的情况,DD会永远保持当前值,程序直接进入死循环。正确逻辑是不管是否能整除,每次循环都要执行DD减1。 HITS = HITS++、DD = DD--的写法是错误的:JS中后置自增/自减运算符会先返回变量旧值,再修改本身,你额外赋值等于把旧值又写回了变量,自增自减操作相当于没生效,直接写HITS++、DD--即可。- 素数判断的输出逻辑写在了while循环内部,还没遍历完所有除数就提前判断输出了,应该把这部分代码移到while循环结束之后。
- 输出的字符串中
UI和is之间缺少空格,会出现5is a prime number.这种格式错误。 - 没有对用户输入非数字、输入为空的情况做兼容,
parseInt会返回NaN,可以额外加判断处理异常输入。
修正后的可运行代码
function checkPrime() { var HITS = 0; // 能整除的次数统计 var UI = prompt("请输入一个整数来判断是否为素数:"); // 兼容空输入/用户点击取消的情况 if(UI === null || UI.trim() === '') { document.getElementById('demo').innerHTML = "你未输入有效内容"; return; } var TV = parseInt(UI,10); // 兼容非数字输入 if(isNaN(TV)) { document.getElementById('demo').innerHTML = "你输入的不是有效整数"; return; } var DD = TV; while (DD > 0) { if (TV % DD == 0) { HITS++; } DD--; } if (HITS > 2 || TV == 1 || TV < 1) { document.getElementById('demo').innerHTML = UI + " is not a prime number."; } else { document.getElementById('demo').innerHTML = UI + " is a prime number."; } }
页面刷新自动触发方法
要实现页面刷新后自动运行该函数,只需要确保DOM中id为demo的元素加载完成后调用checkPrime()即可,推荐写法如下:
// 等DOM全部加载完成后再执行函数,避免找不到demo元素报错 document.addEventListener('DOMContentLoaded', function() { checkPrime(); });
如果你的script标签是写在demo元素的后面,也可以直接在script末尾加一行checkPrime();即可触发。
内容的提问来源于stack exchange,提问作者user12675490
相关产品推荐
相关产品推荐

