JS判断用户输入是否为素数

最近遇到的一个坑,判断数值是否为素数的时候,忘记考虑函数的封装性

先上代码

function isPrime(num) {
            // 不是数字或者数字小于2
            if (typeof num !== "number" || !Number.isInteger(num)) { // Number.isInterget 判断是否为整数
                return false;
            }
            // 2是质数
            if (num == 2) {
                return true;
            } else if (num % 2 == 0) { //排除偶数
                return false;
            }
            //依次判断是否能被奇数整除,最大循环为数值的开方
            for (var i = 3; i <= Math.sqrt(num); i += 2) {
                if (num % i == 0) {
                    return false;
                }
            }
            return true
        }
        var num = Number(prompt('请输入要判断的数字:')) // Number用以转换数值

        var re = isPrime(num);
        alert(re)

这个坑出自,这句话的判断。

typeof num !== "number" || !Number.isInteger(num)

这个函数应该是被封装好的,不应该受到用户输入的影响。程序内其他需要调用函数的对象,应该将需要传入的num值进行类型转换。而不是等待isPeime函数内的某些隐形转换。

var num = Number(prompt('请输入要判断的数字:')) // Number用以转换数值

所以这行代码十分有必要,它进行了对用户输入的str型值的Num转换。如果在程序更加复杂的情况下,更应该对函数实参的类型多加注意!

 

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页