Вот эффективные функции, которые проверяют, является ли значение числом или можно безопасно преобразовать в число:
function isNumber(value) {
if ((undefined === value) || (null === value)) {
return false;
}
if (typeof value == 'number') {
return true;
}
return !isNaN(value - 0);
}
И для целых чисел (вернул бы false, если значение является плавающим):
function isInteger(value) {
if ((undefined === value) || (null === value)) {
return false;
}
return value % 1 == 0;
}
Эффективность здесь заключается в том, что parseInt (или parseNumber) избегают, когда значение уже является числом. Обе функции синтаксического анализа всегда сначала преобразуются в строку, а затем пытаются проанализировать эту строку, что будет бесполезно, если значение уже является числом.
Спасибо другим постам здесь за предоставление новых идей для оптимизации!