هناك قيمتان خاصتان في JavaScript يمثلان عدم وجود معلومات: لاغية وغير محددة. أنا شخصياً أعتقد أن الفرق بين هاتين القيمتين الخاصتين يمكن فهمه من المنظور التالي:
1. تمثل Null حاوية تخزن المعلومات (مثل المتغير الذي تم تعيين قيمة من قبل) ، ولكن المحتوى في الحاوية فارغ.
2. غير المحدد يعني أنه لا توجد حاوية تستخدم لتخزين المعلومات.
لا يختلف NULL في JavaScript عن NULL في معظم لغات البرمجة الأخرى. يتم استخدامه بشكل أساسي للإشارة إلى أن قيمة المعلومات فارغة ؛ أثناء وجوده في JavaScript ، يعيد التعبير النتيجة غير المحددة في المواقف التالية:
1. متغير لم يتم تعيين قيمة.
2. الوصول إلى قيمة الخاصية غير الموجودة في كائن.
3. أعضاء الوصول غير الموجودين في الصفيف.
4. استدعاء وظيفة بدون بيان العودة.
5. استدعاء وظيفة تكون بيان العودة فارغة ("العودة ؛").
في الواقع ، مثل Infinity و NAN ، غير محدد هو متغير عالمي في JavaScript ويمكن حتى تعيين قيم أخرى في ECMASCRIPT 3. ECMASCRIPT 5 قام بتصحيح هذا الخطأ وتعيين المتغير غير المحدد إلى القراءة فقط.
للمقارنات بين NULL وغير المحددة ، يمكن استخدام المشغل === المتطابق. إذا تم استخدام المشغل العادي == ، فإن فارغًا يعادل غير محدد:
نسخة الكود كما يلي:
console.log (null == undefined) ؛ // true
console.log (null === undefined) ؛ // false
أثناء عملية البرمجة ، إذا كنت بحاجة إلى تعيين قيمة فارغة لمتغير ، يتم استخدام NULL بشكل عام بدلاً من غير محدد. السبب هو:
1. يعتبر غير المحدد عمومًا نقصًا في المعلومات على مستوى النظام ومستوى الإبلاغ عن الخطأ.
2. يعتبر NULL عمومًا مستوى البرمجة وتكون قيمة المعلومات على مستوى العملية المنطقية فارغة.
إذا كان تحويل النوع متورطًا في البرنامج ، فإن نتائج NULL وغير محددة عند تحويلها إلى نوع الرقم مختلف:
1. نتيجة التحويل غير المحدد إلى العدد هو نان.
2. نتيجة تحويل فارغ إلى الرقم هو 0.
تجدر الإشارة إلى أن نتيجة تحويل سلسلة فارغة ومصفوفة فارغة إلى رقم هي أيضًا 0.
بالنسبة إلى سبب تصميم قيمتين تمثلان "لا" في JavaScript ، يمكنك الرجوع إلى منشور مدونة Ruan Yifeng.
تجربة
في الكود التجريبي التالي ، تكون نتائج التعبير غير محددة:
نسخة الكود كما يلي:
var a ؛
console.log (a) ؛
عينة الوظيفة (x) {
this.x = x ؛
}
var s = عينة جديدة () ؛
console.log (SX)
console.log (S.Notexistvariable) ؛
var n = [2،3،4] ؛
console.log (n [8]) ؛
اختبار الوظيفة () {
// لا قيمة إرجاع لهذه الوظيفة
}
console.log (test ()) ؛
وظيفة test2 () {
يعود؛
}
console.log (test2 ()) ؛