--- title: NaN slug: Web/JavaScript/Reference/Global_Objects/NaN tags: - JavaScript - Tham khảo - Thuộc tính translation_of: Web/JavaScript/Reference/Global_Objects/NaN ---
{{jsSidebar("Objects")}}

Thuộc tính global NaN có giá trị đại diện cho khái niệm Not-A-Number (Không-phải-Số).

{{js_property_attributes(0,0,0)}}

{{EmbedInteractiveExample("pages/js/globalprops-nan.html")}}

Cú pháp

NaN

Mô tả

NaN là thuộc tính của đối tượng global.

Giá trị khởi tạo của NaN là Not-A-Number — giống như giá trị của {{jsxref("Number.NaN")}}. Với các trình duyệt hiện đại, NaN không thể cấu hình được, không có thuộc tính được-viết. Kể cả khi được phép thì vẫn phải tránh việc ghi đè lên nó.

Người ta hiếm khi dùng NaN trong viết chương trình. Nó được dùng làm giá trị trả về khi việc tính toán của các hàm {{jsxref("Math")}} thất bại (Math.sqrt(-1)) hoặc khi hàm phân tích phải dữ liệu số sai (parseInt("là lá la")).

Kiểm thử phép so sánh NaN

Không thể thực hiện phép so sánh bằng (thông qua ==, !=, ===, và !==NaN với bất kỳ giá trị nào khác, bao gồm cả một giá trị NaN khác. Hãy dùng {{jsxref("Number.isNaN()")}} hoặc {{jsxref("Global_Objects/isNaN", "isNaN()")}} để xác định rõ ràng đó có phải là NaN hay không. Hoặc làm thử một phép so sánh bản thân: NaN, và chỉ NaN, sẽ so sánh không cân bằng với chính nó.

NaN === NaN;        // false (sai)
Number.NaN === NaN; // false
isNaN(NaN);         // true (đúng)
isNaN(Number.NaN);  // true

function valueIsNaN(v) { return v !== v; }
valueIsNaN(1);          // false
valueIsNaN(NaN);        // true
valueIsNaN(Number.NaN); // true

Tuy nhiên, lưu ý rằng có khác biệt giữa isNaN() và Number.isNaN(): isNaN() sẽ trả về giá trị true (đúng) nếu như giá trị hiện tại là NaN hoặc nó sẽ thành NaN sau khi bị ép số hóa dữ liệu, còn với Number.isNaN() thì dữ liệu trả về là true chỉ khi giá trị hiện tại là NaN.

isNaN('hello world'); // trả về giá trị 'true'.
Number.isNaN('hello world'); // trả về giá trị 'false'.

Thông số kỹ thuật

Thông số kỹ thuật Trạng thái Chú thích
{{SpecName('ES1')}} {{Spec2('ES1')}} Định nghĩa đầu tiên. Được đưa vào JavaScript 1.3
{{SpecName('ES5.1', '#sec-15.1.1.1', 'NaN')}} {{Spec2('ES5.1')}}  
{{SpecName('ES6', '#sec-value-properties-of-the-global-object-nan', 'NaN')}} {{Spec2('ES6')}}  
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-nan', 'NaN')}} {{Spec2('ESDraft')}}  

Tính tương thích trên trình duyệt

{{Compat("javascript.builtins.NaN")}}

Xem thêm