2015-09-24 1 views
8

Я новичок в веб-разработке, а в моей функции хочу проверить, является ли заданное строковое значение числом. Если строка не является допустимым числом, я хочу вернуть значение null.Typcript: проверьте строку для номера

Следующие работы предназначены для всех случаев, кроме случаев, когда строка равна «0», и в этом случае она возвращает null.

parseInt(columnSortSettings[0]) || null; 

Как предотвратить это. Очевидно, parseInt не считает 0 целым числом!

+2

'0' является falsy значение .. – Hacketo

+2

я не отправил [эту ссылку] (HTTP: //www.codeproject.com/Articles/182416/A-Collection-of-JavaScript-Gotchas), но он всегда стоит прочитать для всех, кто изучает/использует javascript – musefan

ответ

9

Поскольку 0 будет действовать как ложные, так что вы можете использовать isNaN() в этом случае

var res = parseInt(columnSortSettings[0], 10); 
return isNaN(res) ? null : res; 
+0

Не забудьте 'radix'. – Andy

+0

@ Энди: спасибо, обновлено :) –

4

Это потому, что вы в основном проверяете 0, что также неверно. Вы можете сделать

var n = columnSortSettings[0]; 
if(parseInt(n, 10) || n === '0'){ 
    //... 
} 

Вы также можете проверить вместо этого, если это число

if(typeof(parseInt(n, 10)) === 'number'){ 
    //... 
} 

Но остерегайтесь причина

typeof Infinity === 'number'; 
typeof NaN === 'number'; 
+0

Не забудьте 'radix'. – Andy

+0

@ Энди, полностью забыл :) – Eric

+0

Спасибо @Eric. Поскольку SO позволяет мне принять только один ответ, я подтвердил ваш ответ. –

0

Вы можете использовать IsNumeric оператор из rxjs библиотеки (импортирования rxjs/Util/IsNumeric

Смежные вопросы