ما هي الكلمة الرئيسية المحجوزة لنان في جافا سكريبت؟

StackOverflow https://stackoverflow.com/questions/559792

  •  05-09-2019
  •  | 
  •  

سؤال

إذا كنت ترغب في اختبار نتيجة تعبير، فستظهر الوظيفة نان كيف يمكنني التحقق من ذلك؟
أمثلة:
$('amount').value.toInt()!='NaN'
^ لا يعمل وأفترض أن القيمة المرتجعة ليست سلسلة،
$('amount').value.toInt()!=NaN
^ لا يبدو أن العمل أيضا وهذا يبدو واضحا

إذن كيف يمكنني التحقق من الطريقة التي تم إرجاعها ليس عددا؟

هل كانت مفيدة؟

المحلول

يتم تعريف قيمة NAN لتكون غير متكافئة لكل شيء، بما في ذلك نفسها. اختبار إذا كانت قيمة نان مع isNaN() وظيفة، بشكل مناسب بما فيه الكفاية. (ecmascript 6 يضيف Number.isNan() وظيفة مع دلالات مختلفة للحجج غير الأرقام، ولكنها غير مدعومة في جميع المتصفحات حتى الآن اعتبارا من عام 2015).

هناك اثنين من العقارات المدمجة المتاحة مع قيمة نان: العالم NaN الممتلكات (أي window.NaN في المتصفحات)، و Number.NaN. وبعد أنه ليس الكلمة الأساسية اللغة. في المتصفحات القديمة، NaN يمكن الكتابة الملكية، مع نتائج مربكة محتملة، ولكن مع Ecmascript 5 Standard تم تصنيعه غير قابل للكتابة.

  • كما أشار some في التعليقات، هناك أيضا الوظيفة العالمية isfinite () والتي قد تكون مفيدة.

نصائح أخرى

أفضل طريقة للتحقق من نتيجة التشغيل الرقمي ضد نان هي الإفادة بهذه الطريقة، مثال:

var x  = 0;
var y  = 0;
var result = x/y;  // we know that result will be NaN value
// to test if result holds a NaN value we should use the following code :

if(result !=result){
console.log('this is an NaN value');
} 

ويتم ذلك.

الحيلة هي أن نان لا يمكن مقارنتها بأي قيمة أخرى حتى معها (نان! = نان صحيحة دائما حتى نتمكن من الاستفادة من هذا وقارن النتيجة ضد نفسها)

هذا هو جافا سكريبت (لغة جيدة وغريب)

لا يمكن استخدام مشغل المساواة (== و ===) لاختبار قيمة ضد نان. استخدم Number.isnan () أو Isnan () بدلا من ذلك.

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top