2014-06-06 12 views
6

tại sao hàm isNaN trong nút quay lại trả về false trong các trường hợp sau?isNaN chức năng trong nodejs

isNaN(''),isNaN('\n'),isNaN('\t') 

điều này rất lạ.

ai đó có bất kỳ ý tưởng nào như tôi nghĩ làNaN đứng không phải là số.

ai đó có thể vui lòng làm rõ

Cảm ơn bạn trước!

Trả lời

11

Bởi vì bạn đang không đi qua nó một con số, nó sẽ chuyển nó thành số. Tất cả những chuyển đổi sang 0 đó là 0 và không NaN

Number('') 
0 
Number('\n') 
0 
Number('\t') 
0 
isNaN(0) 
false 

Lưu ý rằng NaN không đứng cho "không phải là một Số JavaScript". In fact it's completely separate from JavaScript và tồn tại ở tất cả các ngôn ngữ hỗ trợ IEEE-754 nổi.

Nếu bạn muốn kiểm tra xem một cái gì đó là một số javascript, việc kiểm tra là

if (typeof value === "number") { 

} 
+3

Lưu ý rằng giá trị 'NaN' là một số Javascript =>' typeof NaN === 'number' // true' – mjlescano

0

isNaN là một "không phải là số" chức năng, nó sẽ trả đúng khi không có số được cung cấp cho nó như là tham số, và sai khi một số được đưa ra

+0

Tôi đoán rằng bạn muốn nói "sai" khi một số được đưa ra. Bạn có thể muốn chỉnh sửa câu trả lời của mình để sửa nó. –

3

NaN là một điều rất đặc biệt: nó là một giá trị dấu chấm động trong đó có cờ NaN thích hợp thiết lập, theo IEEE754 spec (Wikipedia article).

Nếu bạn muốn kiểm tra xem chuỗi có giá trị số trong đó, bạn có thể làm parseFloat(str) (MDN on parseFloat). Nếu không tìm thấy bất kỳ nội dung số hợp lệ nào hoặc tìm các ký tự không hợp lệ trước khi tìm số, nó sẽ trả về giá trị NaN.

Vì vậy, hãy thử thực hiện isNaN(parseFloat(str)) - nó mang lại cho tôi true cho tất cả ba ví dụ được đăng.

+0

yup đây là những gì tôi đang sử dụng nhưng nó sẽ đơn giản hơn nếu isNaN có thể đã thực hiện thủ thuật .. – azero0

+0

@ A-0-: isNaN có mục đích cụ thể; để phát hiện các giá trị NaN theo thông số kỹ thuật IEEE754. Nó không phải là để có một kiểm tra tổng số, đó là chủ yếu được thực hiện trong parseFloat có công việc là để xây dựng số từ dây. Chúng tôi chỉ đang sử dụng isNaN ở đây vì parseFloat trả về giá trị NaN khi nó không thành công; nếu nó đã xảy ra lỗi, chúng tôi sẽ không sử dụng isNaN. Đừng nhầm lẫn làNaN với một loại isNumeric - isNaN chỉ hoạt động trên các giá trị số, không phải chuỗi và kiểm tra cho một loại giá trị cụ thể. –

3

isNan() được thiết kế để giúp phát hiện những thứ 'không được xác định về mặt toán học' - ví dụ: 0/0 -

node 
> isNaN(0/0) 
true 
> isNaN(1/0) 
false 
> isNaN(Math.sqrt(-1)) 
true 
> isNaN(Math.log(-1)) 
true 

Lời khuyên khác bạn có ở đây trong câu hỏi này về cách phát hiện số là vững chắc.

Các vấn đề liên quan