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 .