谁能告诉我一些代码,以确定一个数字在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