١.٩ النوع 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
كيف تعمل؟
-
يقرأ محرّك JavaScript الشيفرة سطرًا بسطر.
-
يُسنِد
undefinedإلى المتغير المصرّح عنهmark. -
ينفّذ الشيفرة سطرًا بسطر من الأعلى إلى الأسفل.
-
console.log(mark);;markقيمتهundefinedحاليًا. -
يُسنِد القيمة 90 إلى
mark. -
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.