2015-09-24 20 views
8

Tôi mới phát triển web và chức năng của tôi muốn kiểm tra xem giá trị chuỗi đã cho có phải là số hay không. Trong trường hợp chuỗi không phải là số hợp lệ, tôi muốn trả về null.Loại: kiểm tra chuỗi số

Các công trình sau đây cho tất cả các trường hợp ngoại trừ khi chuỗi là "0" trong trường hợp này nó trả về giá trị rỗng.

parseInt(columnSortSettings[0]) || null; 

Làm cách nào để ngăn điều này xảy ra. ParseInt phân tách không coi 0 là một số nguyên!

+2

'0' là một giá trị falsy .. – Hacketo

+2

Tôi đã không được đăng [link này] (http: //www.codeproject.com/Articles/182416/A-Collection-of-JavaScript-Gotchas) trong một thời gian, nhưng nó luôn luôn đáng đọc cho bất cứ ai học/sử dụng javascript – musefan

Trả lời

9

Kể từ 0 đang đóng vai trò là sai, vì vậy bạn có thể sử dụng isNaN() trong trường hợp này

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

Đừng quên 'radix'. – Andy

+0

@Andy: cảm ơn, đã cập nhật :) –

4

Đó là vì bạn về cơ bản thử nghiệm 0 cũng là sai. Bạn có thể làm

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

Bạn cũng có thể kiểm tra thay vì nếu đó là một số

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

Nhưng hãy cẩn thận nguyên nhân

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

Đừng quên 'radix'. – Andy

+0

@Andy, yup hoàn toàn quên :) – Eric

+0

Cảm ơn @Eric. Vì SO cho phép tôi chỉ chấp nhận một câu trả lời, tôi đã upvoted câu trả lời của bạn. –

0

Bạn có thể sử dụng IsNumeric hành từ rxjs thư viện (nhập khẩu rxjs/util/IsNumeric