undefinedفي JavaScript

من موسوعة حسوب

الخاصية العامة undefined تُمثِّل القيمة الأوليّة undefined في JavaScript.

سمات الخاصية undefined
قابلة للكتابة لا
قابلة للإحصاء لا
قابلة للضبط لا

البنية العامة

undefined

الوصف

الخاصية undefined هي خاصيةٌ للكائن العام (global object) أي أنها متغيرٌ في المجال العام، والقيمة الابتدائية للخاصية undefined هي نوع البيانات الأوليّ undefined.

الخاصية undefined غير قابلة للضبط وغير قابلة للكتابة في المتصفحات الحديثة (بدءًا من معيار ECMAScript 5)، لكن مع ذلك حاول تجنّب الكتابة عليها.

المتغيرات التي لم تُسنَد لها قيمةٌ سيكون نوعها هو undefined، والتعابير البرمجية ستُعيد undefined إذا لم تُسنَد قيمةٌ إلى المتغير الذي يُقدِّر قيمتها، وستُعيد دالةٌ ما القيمة undefined إذا لم نُحدِّد قيمةً لتعيدها تلك الدالة عبر التعبير البرمجي return.

وصحيحٌ أنَّ بإمكاننا استخدام الكلمة undefined كمُعرِّف (identifier، أي اسم لأحد المتغيرات) في أي مجال عدا المجال العام (وذلك لأنَّ undefined ليست كلمةً محجوزةً)، لكن من غير المناسب فعل ذلك، وسيؤدي ذلك إلى تصعيب صيانة وتنقيح أخطاء البرنامج.

// لا تفعل هذا أبدًا

// "foo string"
(function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })();

// "foo string"
(function(undefined) { console.log(undefined, typeof undefined); })('foo');

أمثلة

معامل المطابقة مع undefined

يمكنك استخدام معامل المطابقة (===) مع undefined لمعرفة إذا امتلك متغيرٌ ما قيمةً، ففي الشيفرة الآتية لم تُعرَّف قيمةٌ للمتغير x، وستكون نتيجة التعبير البرمجي if هي true:

var x;
if (x === undefined) {
   // ستُنفَّذ التعابير البرمجية هنا
}
else {
   // لن تُنفَّذ التعابير البرمجية هنا
}

لاحظ أنَّنا استخدمنا معامل المطابقة (===) بدلًا من استخدام معامل المساواة العادي (==)، وذلك لأنَّ x == undefined سيُعيد القيمة true إذا كانت قيمة x تساوي null، بينما لا يفعل ذلك معامل المطابقة؛ فالقيمة null لا تكافئ undefined. راجع صفحة معاملات المقارنة للتفاصيل.

المعامل typeof والقيمة undefined

بشكلٍ بديلٍ عمّا سبق، يمكننا استخدام المعامل typeof لمعرفة إذا كانت قيمة المتغير undefined:

var x;
if (typeof x === 'undefined') {
   // ستُنفِّذ التعابير البرمجية هنا
}

أحد أسباب استخدام المعامل typeof هو أنَّه لن يؤدي إلى رمي خطأ عند عدم التصريح عن المتغير:

// لم يُعرَّف المتغير بعد
if (typeof x === 'undefined') { // دون مشاكل
   // ستُنفَّذ التعابير البرمجية هنا
}

if (x === undefined) { // يرمي ReferenceError

}

المعامل void والقيمة undefined

طريقة ثالثة للتحقق إذا كانت قيمة أحد المتغيرات تساوي undefined هي استخدام المعامل void:

var x;
if (x === void 0) {
   // ستُنفَّذ التعابير البرمجية هنا
}

// لم يُعرَّف هذا المتغير من قبل
if (y === void 0) {
   // سيرمى الخطأ a - Uncaught ReferenceError: y is not defined
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

مصادر ومواصفات