تتعامل جافا سكريبت، كونها بلغة برمجة ديناميكية الأنواع، مع غياب القيمة بشكل مختلف عن العديد من اللغات الأخرى. وهذا الدقيق، الممثل بكلمة undefined
، أساسي لكتابة شفرة قوية وموثوقة. تستعرض هذه المقالة undefined
، والسيناريوهات الشائعة التي تظهر فيها، وكيف تختلف عن null
.
محتويات
فهم undefined
في جافا سكريبت، undefined
هي قيمة بدائية تشير إلى أن المتغير قد تم الإعلان عنه ولكن لم يتم تعيين قيمة له. هذا يختلف عن المتغير غير المعلن عنه؛ حيث أن محاولة الوصول إلى متغير غير معلن عنه يرمي ReferenceError
. undefined
تشير إلى قيمة مفقودة، وليست حالة خطأ في حد ذاتها. تقوم جافا سكريبت تلقائيًا بتعيين undefined
للمتغيرات المعلنة ولكن غير المُبدأة.
سيناريوهات تؤدي إلى undefined
يمكن أن تؤدي عدة حالات إلى أن تقوم دالة أو تعبير بإرجاع undefined
:
- الدوال بدون جمل
return
: الدوال التي لا تستخدم صراحةً جملةreturn
تقوم ضمنيًا بإرجاعundefined
. - الوصول إلى خصائص غير موجودة: محاولة الوصول إلى خاصية غير موجودة في كائن ينتج عنها
undefined
. - الوصول إلى عناصر المصفوفة خارج الحدود: الوصول إلى عنصر مصفوفة باستخدام فهرس أكبر من أو يساوي طول المصفوفة يُرجع
undefined
. - المتغيرات غير المُبدأة: كما ذكرنا، فإن المتغير المُعلن عنه ولكن غير المُبدأ يحتفظ بقيمة
undefined
. - عامل التشغيل
delete
: استخدامdelete
على خاصية كائن يقوم بإزالة الخاصية، تاركًاundefined
في مكانها.
فيما يلي بعض أمثلة الشفرة التي توضح هذه السيناريوهات:
function myFunction() {
// لا يوجد جملة return
}
let result = myFunction();
console.log(result); // الإخراج: undefined
let myObject = { name: "John" };
console.log(myObject.age); // الإخراج: undefined
let myArray = [1, 2, 3];
console.log(myArray[3]); // الإخراج: undefined
let myVariable;
console.log(myVariable); // الإخراج: undefined
let myObject2 = { name: "John", age: 30 };
delete myObject2.age;
console.log(myObject2.age); // الإخراج: undefined
undefined
مقابل null
يمثل كل من undefined
و null
غياب قيمة ذات معنى، لكنهما يختلفان بشكل طفيف:
undefined
: يشير إلى أن المتغير قد تم الإعلان عنه ولكن لم يتم تعيين قيمة له. يتم تعيينه تلقائيًا بواسطة جافا سكريبت.null
: يمثل الغياب المتعمد لقيمة. يتم تعيينه صراحةً بواسطة المبرمج.
على الرغم من استخدامهما بالتبادل في كثير من الأحيان، فإن undefined
تشير إلى غياب غير مقصود، بينما null
تشير إلى تعيين متعمد. هما قيمتان مختلفتان؛ undefined === null
هي false
.
أفضل الممارسات
يُعد فهم undefined
أمرًا حيويًا للتصحيح وكتابة شفرة نظيفة وقابلة للتنبؤ. إن استخدام null
صراحةً عند الاقتضاء يُحسّن من قابلية قراءة الشفرة وصيانتها. تجنب الاعتماد على قيم undefined
الضمنية؛ بدلاً من ذلك، قم بتعيين null
للإشارة إلى الغياب المتعمد لقيمة. هذا يحسن وضوح الشفرة ويقلل من الأخطاء المحتملة.