2011-11-25 48 views
16

Có điều gì đó kỳ lạ.isNaN() vs parseInt() nhầm lẫn

Tại sao
với isNaN("") tôi nhận được False
Nhưng
với parseInt("") tôi nhận được NaN
?

+2

Bản sao có thể có của http://stackoverflow.com/questions/825402/why-does-isnan-equal-false –

+0

Vì 'isNaN' không sử dụng' parseInt'? –

+1

Điều quan trọng là hiểu sự khác biệt giữa ** loại chuyển đổi ** và ** phân tích cú pháp **, 'isNaN' đằng sau hậu trường, sẽ thực hiện chuyển đổi kiểu đối số của nó thành kiểu' Số', trong khi 'parseInt' sẽ cố gắng * phân tích cú pháp * chuỗi được cung cấp. Xem thêm: http://stackoverflow.com/questions/4090518/string-to-int-use-parseint-or-number – CMS

Trả lời

19

isNaN mất một số nguyên như một cuộc tranh cãi - do đó JS chuyển đổi "" để 0

parseInt mất một chuỗi như một cuộc tranh cãi - do đó một chuỗi rỗng không phải là số

+0

đã được trả lời - sao chép http://stackoverflow.com/questions/825402/why-does-isnan -equal-false –

+10

'isNaN' không có" số nguyên ", nó * mong đợi * một Số (tất cả đều là IEEE-754 tăng gấp đôi, ví dụ' isNaN (0.5) 'sản lượng' false'), đó là lý do tại sao nó cố gắng * type convert * giá trị đối số thành Số – CMS

+0

Quyền của bạn - nhưng tôi đã cố giữ logic đơn giản. –

0

Điều này là do "" tương đương với zero trong JavaScript. Hãy thử "" == 0. Điều này có nghĩa là nếu bạn thử đánh giá nó theo phương trình số, nó sẽ xuất hiện là 0. Khi bạn phân tích nó, mặt khác nó nhận ra không có gì ở đó.

Thay thế cho parseInt bạn có thể sử dụng Math.floor. Điều này sẽ cung cấp cho bạn 0 cho "".

+0

Chính xác thì ý nghĩa của bạn là "tương đương"? – Kos