2014-03-02 5 views

답변

2

나는 parseInt 생각하지 않는다 또는 parseFloat 여기에 어떤 쓸모가 있습니다.

return Math.max.apply(Math, Array.prototype.filter.call(arguments, function(value) { 
    return typeof value === 'number'; 
})); 

arguments가 함수에 전달 된 모든 인수를 포함하는 배열과 같은 객체입니다 당신은 단순히 값이 숫자와 filter out 아닌 모든 숫자 값인지 여부를 테스트 할 수 있습니다. 그러나 실제 배열이 아니기 때문에 배열 메서드를 사용하려면 Array.prototype.<method>.call을 사용해야합니다.

.apply을 사용하면 배열을 두 번째 인수로 전달하여 알 수없는 매개 변수 수가있는 함수를 호출 할 수 있습니다.


숫자 문자열을 허용하려는 경우. "123" 대신 isNaN (일부 추가 경비 null에 대한 빈 문자열)을 사용할 수 있습니다 null""에 대한

return Math.max.apply(Math, Array.prototype.filter.call(arguments, function(value) { 
    return value != null && value !== "" && !isNaN(value); 
})); 

왜 추가 테스트? Number("")Number(null)은 모두 0이므로 isNaN은 두 가지 모두에 대해 false을 반환합니다 (하지만이 값은 여전히 ​​제외하고 싶습니다).

+0

좋은 답변이지만, 설명해 주시면 더 좋을 것입니다. 내가 읽었던 것보다 많은 낭독이 필요했습니다. – rvighne

관련 문제