قيمة فارغة وغير محدّدة

تتضمن لغة JavaScript عدة طرق للإشارة إلى غياب قيمة. هذه الصفحة يصف الطريقتين الأكثر شيوعًا، وهما نوعا البيانات null وundefined.

null

تمثل الكلمة الرئيسية null غياب قيمة عن قصد. null قيمة أساسية، على الرغم من أن عامل التشغيل typeof يعرض أن null يمثل كائنًا. هذا خطأ وقد استمر من الإصدار الأول من JavaScript وتركنا عمدًا بدون معالجة لتجنب تعطيل السلوك المتوقع عبر الويب.

typeof null
> object

يمكنك تعريف متغيّر على أنّه null مع توقع أنها تعكس إما القيمة المخصصة لها في وقت ما نقطة في نص برمجي أو أي قيمة غير موجودة يمكنك أيضًا تعيين null قيمة إلى مرجع موجود لمسح قيمة سابقة.

undefined

undefined هي قيمة أولية يتم تحديدها للمتغيّرات. التي تم الإعلان عنها للتو، أو على القيمة الناتجة لعملية لا تكون ذات قيمة ذات مغزى. على سبيل المثال، يمكن أن يحدث ذلك عندما تعلن وظيفة في وحدة تحكم المطوّرين في المتصفح:

function myFunction() {}
> undefined

تعرض الدالة بشكل صريح undefined عند استخدام عبارة return الخاصة بها. لا ينتج عنه أي قيمة.

(function() {
    return;
}());
> undefined

مقارنة بين null وundefined

على الرغم من تداخل الوظائف بين undefined وnull، إلا أنّ هناك لأغراض مختلفة. بالمعنى الأكثر صرامة، تمثل null قيمة عمدًا على أنها "فارغة"، وundefined يمثل نقصًا في أي قيمة مخصصة.

null وundefined متساويتان تمامًا، ولكن ليستا متساويتين تمامًا. يجبر عامل المساواة الحرة المعاملات من أنواع مختلفة على المنطقية مما يجعل null وundefined كلاهما false. عامل المساواة الصارم تعتبر معاملات أنواع البيانات المختلفة غير متساوية.

null == undefined
> true

null === undefined
> false

بخلاف الكلمة الرئيسية المحجوزة null، تعد undefined سمة من سمات كائن عمومي. كان هذا تصميمًا اتخاذ القرار في مرحلة مبكرة من تطوير JavaScript، كما أنّ ذلك يتيح للمتصفّحات القديمة استبدِل undefined تمامًا. في المتصفحات الحديثة، لا يزال من الممكن استخدام undefined كمعرِّف في النطاقات غير العمومية، متجاوزًا قيمته في نطاق هذا البيان. يجب أبدًا استخدام undefined كمعرّف. أُنشأها جون هنتر، الذي كان متخصصًا إلى سلوك غير متوقع ومن المحتمل أن يربك المستخدمين المستقبليين قاعدة التعليمات البرمجية.

التحقق من فهمك

ماذا يعرض typeof null؟

object
undefined
primitive
string