매우 간단한 알고리즘으로 간단한 isEven 및 isOdd 함수 를 작성하기로 결정했습니다 .
function isEven(n) {
n = Number(n);
return n === 0 || !!(n && !(n%2));
}
function isOdd(n) {
return isEven(Number(n) + 1);
}
n에 특정 매개 변수가 있으면 괜찮지 만 많은 시나리오에서 실패합니다. 그래서 가능한 많은 시나리오에 대해 올바른 결과를 제공하는 강력한 함수를 만들기 시작했습니다. 따라서 자바 스크립트 수 한도 내의 정수 만 테스트하고 다른 모든 것은 false (+ 및-무한대 포함)를 반환합니다. 0은 짝수입니다.
// 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에 대한 명확한 버전을 찾을 수 없습니다.