谁能告诉我一些代码,以确定一个数字在JavaScript是偶数还是奇数?


当前回答

在ES6:

const isOdd = num => num % 2 == 1;

其他回答

若为奇数则返回true

function isOdd(n) {
    return Math.abs(n)%2===1;
}

如果为偶数则返回true

function isEven(n) {
    return Math.abs(n)%2!==1;
}

我使用Math.abs()以防得到负数

ES6中的一行代码,因为它很干净。

const isEven = (num) => num % 2 == 0;

我将实现这个来返回一个布尔值:

function isOdd (n) {
    return !!(n % 2);
    // or ((n % 2) !== 0).
}

它对无符号数和有符号数都有效。当模量返回-1或1时,它将被转换为true。

Non-modulus解决方案:

var is_finite = isFinite;
var is_nan = isNaN;

function isOdd (discriminant) {
    if (is_nan(discriminant) && !is_finite(discriminant)) {
        return false;
    }

    // Unsigned numbers
    if (discriminant >= 0) {
        while (discriminant >= 1) discriminant -= 2;

    // Signed numbers
    } else {
        if (discriminant === -1) return true;
        while (discriminant <= -1) discriminant += 2;
    }

    return !!discriminant;
}

奇数除以2剩下余数为1,偶数除以0剩下余数为0。因此我们可以使用这段代码

  function checker(number)  {
   return number%2==0?even:odd;
   }

当您需要测试某个变量是否是奇数时,您应该首先测试它是否是整数。另外,请注意,当您计算负数的余数时,结果将是负数(-3 % 2 === -1)。

function isOdd(value) {
  return typeof value === "number" && // value should be a number
    isFinite(value) &&                // value should be finite
    Math.floor(value) === value &&    // value should be integer
    value % 2 !== 0;                  // value should not be even
}

如果号码。isInteger是可用的,你也可以将这段代码简化为:

function isOdd(value) {
  return Number.isInteger(value)      // value should be integer
    value % 2 !== 0;                  // value should not be even
}

注意:在这里,我们测试值% 2 !== 0而不是值% 2 == 1,因为-3 % 2 === -1。如果你不想让-1通过这个测试,你可能需要改变这一行。

下面是一些测试用例:

isOdd();         // false
isOdd("string"); // false
isOdd(Infinity); // false
isOdd(NaN);      // false
isOdd(0);        // false
isOdd(1.1);      // false
isOdd("1");      // false
isOdd(1);        // true
isOdd(-1);       // true