Tôi đang làm việc với Google Apps Script và vì vậy tôi bị kẹt với ECMA 5. Tương tự như câu trả lời của Coffee Coffee, đây là những gì tôi đã có thể hình dung ra rằng dường như cung cấp một câu trả lời chắc chắn là có hay không phải là một giá trị thực sự là NaN
, không nếu một giá trị là NaN
nhưng nếu nó thực sự là NaN
bản thân:
function isThisNaN(x)
{
return isNaN(x) && Object.prototype.toString.call(x) === '[object Number]';
}
console.log(isThisNaN(NaN)); // true
lol Chỉ cần hài hước với tôi rằng Object.prototype.toString.call(NaN)
bằng '[object Number]'
. Bộ não mới của tôi nói với tôi rằng NaN
là "Không phải là số" nhưng đáng buồn là nó không đơn giản như vậy.
EDIT: Tôi đoán tôi nên nói rằng tôi đã kết thúc bài viết này như thế nào. Tôi đi với ý tưởng rằng chắc chắn một chuỗi không chứa một số sẽ không được coi là một số ... tốt, tôi đã kết thúc việc tìm kiếm này ra:
isNaN('a'); // true
isNaN(' '); // false
nên mặc dù ' '
là một chuỗi không phải là số, nó dường như được đưa vào một số (0
).
console.log(Number(' ')); // 0.0
tuy nhiên ...
console.log(0 ? true : false); // false
console.log(' ' ? true : false); // true
Sau khi đọc tôi càng làm hiểu nó tốt hơn một chút nhưng wow những gì một tinh thần crapstorm cho một newbie lol
Một NaN không bao giờ bằng chính nó, theo định nghĩa. Nó hoạt động theo cách này bằng bất kỳ ngôn ngữ nào. – Keith
Lưu ý [câu trả lời của tôi dưới đây] (http://stackoverflow.com/a/12628417/1195056) là một phương pháp chính xác để kiểm tra điều này đã được thêm vào với ECMAScript 6. – krillgar
Phần tốt nhất của sự kiện là 'parseFloat (" A ") == parseFloat ("A") 'return' false' –