java判断变量是奇书还是偶数_测试值是奇数还是偶数

我决定用一个非常简单的算法创建简单的isEven和isOdd函数:

function isEven(n) {

n = Number(n);

return n === 0 || !!(n && !(n%2));

}

function isOdd(n) {

return isEven(Number(n) + 1);

}

如果n具有某些参数,则可以,但在许多情况下都会失败 . 因此,我开始创建强大的函数,为尽可能多的场景提供正确的结果,以便只测试javascript数量限制内的整数,其他所有内容都返回false(包括 - 和 - 无穷大) . 注意零是偶数 .

// Returns true if:

//

// n is an integer that is evenly divisible by 2

//

// Zero (+/-0) is even

// Returns false if n is not an integer, not even or NaN

// Guard against empty string

(function (global) {

function basicTests(n) {

// Deal with empty string

if (n === '')

return false;

// Convert n to Number (may set to NaN)

n = Number(n);

// Deal with NaN

if (isNaN(n))

return false;

// Deal with infinity -

if (n === Number.NEGATIVE_INFINITY || n === Number.POSITIVE_INFINITY)

return false;

// Return n as a number

return n;

}

function isEven(n) {

// Do basic tests

if (basicTests(n) === false)

return false;

// Convert to Number and proceed

n = Number(n);

// Return true/false

return n === 0 || !!(n && !(n%2));

}

global.isEven = isEven;

// Returns true if n is an integer and (n+1) is even

// Returns false if n is not an integer or (n+1) is not even

// Empty string evaluates to zero so returns false (zero is even)

function isOdd(n) {

// Do basic tests

if (basicTests(n) === false)

return false;

// Return true/false

return n === 0 || !!(n && (n%2));

}

global.isOdd = isOdd;

}(this));

任何人都可以看到上述问题吗?是否有更好的(即更准确,更快或更简洁而不被混淆)版本?

有各种与其他语言相关的帖子,但我似乎找不到ECMAScript的最终版本 .

编辑

添加了代码审核标记,但我不是在进行代码审核之后 . 我发布了这些代码只是为了让别人看到我要去的地方,而不是要回顾一下 . 到目前为止发布的答案似乎得到了 .

编辑2

最终的功能,基于史蒂夫的回答:

// Use abstract equality == for "is number" test

function isEven(n) {

return n == parseFloat(n)? !(n%2) : void 0;

}

// Use strict equality === for "is number" test

function isEvenStrict(n) {

return n === parseFloat(n)? !(n%2) : void 0;

}

任何不是数字的东西都返回undefined,数字返回true或false . 它可能是一个带有严格标志的函数,但我认为严格的比较并不是真正需要的 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值