انتقل إلى المحتوى

١.٩ النوع undefined

ما undefined؟

التمرين 1: صرّح عن متغير باسم value.

var value;

ملاحظة (١): var value تعني إنشاء متغير باسم value.

التمرين 2: صرّح عن متغير باسم ageدون إسناد قيمة إليه. افحص قيمته في وحدة التحكم.

var age;
console.log(age)

ستحصل على: undefined.

ما وظيفة undefined? تعني ببساطة أنه لم تُسنَد قيمة إلى المتغير بعد.

نوع undefined

التمرين 3: صرّح عن متغير باسم username. افحص typeof لهذا المتغير.

var username;
console.log(typeof username);

ستحصل على undefined.

ماذا؟! undefined نوعه undefined. نعم!undefined نوع بيانات في JavaScript، مثل string, number, boolean، و null.

التمرين 4: صرّح عن متغيرين؛ الأول اسمه name، والآخر اسمه profession.

var name, profession;

أو

var name;
var profession;

القيمة undefined كاذبة في الشروط

التمرين 5: صرّح عن متغير باسم username، دون إسناد قيم. ثم اختبر هل username صحيح أم خطأ.

var username;
if(username){
  console.log(true);
}else{
  console.log(false);
}

ستحصل على: false.

لماذا؟ undefined تُعامل كقيمة كاذبة في JavaScript.

رفع التصريحات عن المتغيرات (Hoisting)

التمرين 6: إذا كان username يساوي "Ali"، فصرّح عن متغير باسم hasKey، واضبط hasKey على true. وإلا فصرّح عن متغير باسم password، واضبط password واضبط قيمته على "123". ثم اعرض قيمة hasKey و password في وحدة التحكم.

var username = "Ali";
if(username === "Ali"){
  var hasKey = true;
}else{
  var password = 123;
}
console.log(hasKey);
console.log(password);

ستكون النتيجة:

true
undefined

لماذا؟ يمكن فهم التنفيذ على النحو التالي:

١- يجهّز محرّك JavaScript التصريحات قبل تنفيذ الشيفرة.

٢- تُهيّأ المتغيرات المصرّح عنها بالكلمة التالية بالقيمة undefined: var.

٣- في مثالنا السابق، تكون القيم الأولية:

  username  undefined
  hasKey    undefined
  password  undefined

٤- ثم تُنفّذ التعليمات سطرًا بسطر.

٥- وتُسنَد القيم التي حدّدناها عند الوصول إلى تعليمات الإسناد:

  username  Ali
  hasKey    true
  password  undefined

هنا لا تُنفّذ var password = 123; لأن الشرط غير متحقق. لنتدرّب أكثر!

التمرين 7: صرّح عن متغير باسم mark. اعرض mark في وحدة التحكم، ثم أسند القيمة 90 إلى mark. اعرض mark في وحدة التحكم مرة أخرى.

var mark;
console.log(mark);
mark = 90;
console.log(mark);

ستحصل على:

undefined
90

كيف تعمل؟

  1. يقرأ محرّك JavaScript الشيفرة سطرًا بسطر.

  2. يُسنِد undefined إلى المتغير المصرّح عنه mark.

  3. ينفّذ الشيفرة سطرًا بسطر من الأعلى إلى الأسفل.

  4. console.log(mark);; mark قيمته undefined حاليًا.

  5. يُسنِد القيمة 90 إلى mark.

  6. console.log(mark);; mark أصبحت قيمته 90.

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

التمرين 8: صرّح عن متغير باسم firstname، وافحص firstname له. ثم صرّح عن متغير باسم mark، وأسند null إلى mark. افحص mark في وحدة التحكم.

var firstname;
console.log(typeof firstname);
var mark = null;
console.log(typeof null);

ستحصل على:

undefined
object

ما الفرق بين undefined و null?

ملاحظة (٢): undefined تعني هنا أن المتغير مُصرّح عنه، لكنه لم يُسنَد إليه شيء بعد.

ملاحظة (٣): null تعني هنا أن المتغير مُصرّح عنه وأن null أُسنِدت إليه صراحةً.

ملاحظة (٤): null تدلّ على غياب القيمة.

تدريبات إضافية

التمرين 9: صرّح عن أربعة متغيرات: a وb وc وd، واعرض قيمها في وحدة التحكم.

var a, b, c, d;
console.log(a, b, c, d);

ستحصل على: undefined undefined undefined undefined

ملاحظة (٥): لعرض قيم متعددة في وحدة التحكم، نفصل بينها بفواصل. مثلًا: console.log(a, b, c, d)

التمرين 10: صرّح عن متغير باسم lastname، ثم تحقّق هل lastname يساوي 'sth'. إذا كان كذلك، فاضبط المتغير isKnown على true؛ وإلا فاضبط المتغير isKnown على false. تلميح: استخدم العامل الثلاثي.

var lastname;
var isknown = lastname === "sth" ? true : false;
console.log(isknown);

ستحصل على: false.

لماذا؟ لأن lastname قيمته undefined، و undefined لا يساوي "sth". فالشرط غير متحقق، لذا isknown قيمته false.