2013-09-27 162 views
16

Tôi đã thử những điều sau đây để kiểm tra datatype (đặc biệt cho số nguyên), nhưng không hoạt động.làm thế nào để kiểm tra datatype trong nút js-cụ thể cho số nguyên

var i = "5"; 

if(Number(i) = 'NaN') 
{ 
console.log('This is not number')); 
} 
+0

bạn đã thử phải không? có thể trùng lặp của http://stackoverflow.com/questions/175739/is-there-a-built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number – Blacksonic

Trả lời

28

Tôi nghĩ rằng trong hai cách sau để kiểm tra kiểu của một giá trị:

Phương pháp 1:

Bạn có thể sử dụng phương thức javascript isNaN, xác định xem giá trị có phải là NaN hay không. Nhưng vì trong trường hợp của bạn, bạn đang thử nghiệm một giá trị số được chuyển đổi thành chuỗi, Javascript đang cố gắng đoán loại giá trị và chuyển đổi nó thành số 5 không phải là NaN. Đó là lý do tại sao nếu bạn console.log ra kết quả, bạn sẽ ngạc nhiên rằng mã:

if (isNaN(i)) { 
    console.log('This is not number'); 
} 

sẽ không trả lại bất kỳ điều gì. Vì lý do này là một lựa chọn tốt hơn sẽ là phương pháp 2.

Cách 2:

Bạn có thể sử dụng phương pháp javascript typeof để kiểm tra kiểu của một biến hoặc giá trị

if (typeof i != "number") { 
    console.log('This is not number'); 
} 

ý rằng i đang sử dụng toán tử bằng nhau, vì trong trường hợp này, kiểu giá trị là một chuỗi nhưng Javascript nội bộ sẽ chuyển thành Số.

Một phương pháp mạnh mẽ hơn để buộc giá trị thành loại số là sử dụng Number.isNaN là một phần của đề xuất ECMascript 6 (Harmony) mới, do đó không phổ biến và được hỗ trợ đầy đủ bởi các nhà cung cấp khác nhau.

+0

Thậm chí tốt hơn 'typeof i! =" Number "'. – SeinopSys

4

tôi đã sử dụng nó theo cách này và làm việc của mình tốt

quantity=prompt("Please enter the quantity","1"); 
quantity=parseInt(quantity); 
if (!isNaN(quantity)) 
{ 
    totalAmount=itemPrice*quantity; 

} 
return totalAmount; 
+0

xem mã này và sửa đổi mã của bạn ... –

+0

+1 để đặt câu lệnh trả về ngay giữa mệnh đề if/else. cuz, ai cần quy tắc ngôn ngữ, phải không? ANARCHY! – deepelement

2

Logic của bạn là chính xác nhưng bạn có 2 sai lầm rõ ràng tất cả mọi người bỏ qua:

chỉ cần thay đổi if(Number(i) = 'NaN') để if(Number(i) == NaN)

NaN là một hằng số và bạn nên sử dụng đôi dấu hiệu bình đẳng để so sánh, một trong những đơn là được sử dụng để gán giá trị cho biến.

3

Tôi chỉ cần thực hiện một số xét nghiệm trong v4.2.4 Node.js (nhưng điều này là đúng trong bất kỳ thực hiện javascript):

> typeof NaN 
'number' 
> isNaN(NaN) 
true 
> isNaN("hello") 
true 

sự ngạc nhiên là một trong những đầu tiên là loại NaN là "number", nhưng đó là cách nó được định nghĩa trong javascript.

Vì vậy, các thử nghiệm tiếp theo sẽ trả về kết quả bất ngờ

> typeof Number("hello") 
"number" 

vì Số ("hello") là NaN

Hàm ở phía dưới làm cho kết quả như mong đợi:

function isNumeric(n){ 
    return (typeof n == "number" && !isNaN(n)); 
} 
1

bạn có thể thử số này isNaN(Number(x)) trong đó x là bất kỳ thứ gì như chuỗi hoặc số

0

Nếu bạn muốn biết nếu "1" ou 1 có thể được đúc thành một số, bạn có thể sử dụng mã này:

if (isNaN(i*1)) { 
    console.log('i is not a number'); 
}