为了账号安全,请及时绑定邮箱和手机立即绑定

测试值是奇数还是偶数

测试值是奇数还是偶数

慕哥6287543 2019-10-16 10:32:54
我决定使用非常简单的算法创建简单的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的权威版本。
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

使用模数:


function isEven(n) {

   return n % 2 == 0;

}


function isOdd(n) {

   return Math.abs(n % 2) == 1;

}

您可以使用以下命令检查Javascript中的任何值是否可以强制转换为数字:


Number.isFinite(parseFloat(n))

此检查最好应在isEven和isOdd函数外部进行,这样您就不必在两个函数中重复进行错误处理。


查看完整回答
反对 回复 2019-10-16
?
慕神8447489

TA贡献1780条经验 获得超1个赞

我更喜欢使用一点测试:


if(i & 1)

{

    // ODD

}

else

{

    // EVEN

}

这将测试是否在第一个位上表示一个奇数。


查看完整回答
反对 回复 2019-10-16
?
青春有我

TA贡献1784条经验 获得超8个赞

注意:也有负数。


function isOddInteger(n)

{

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

}

哪里


function isInteger(n)

{

   return n === parseInt(n, 10);

}


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 617 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信