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 |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .