الكائن arguments
في JavaScript
الكائن arguments
هو كائن شبيه بالمصفوفات يمنحنا وصولًا إلى الوسائط المُمرَّرة إلى دالةٍ ما.
البنية العامة
arguments
الوصف
الكائن arguments
هو متغيرٌ محليٌّ متاحٌ في جميع الدوال (عدا الدوال السهمية)، ويمكنك الإشارة إلى الوسائط المُمرَّرة إلى الدالة داخلها باستخدام الكائن arguments
. يحتوي هذا الكائن على كل وسيط مُمرَّر إلى الدالة مرتبًا بنفس ترتيب تمريره بدءًا من الفهرس 0. على سبيل المثال، إذا مُرَّرتَ ثلاثة وسائط إلى دالةٍ ما، فيمكنك الإشارة إليها كما يلي:
arguments[0]
arguments[1]
arguments[2]
يمكنك ضبط قيمة الوسائط أيضًا:
arguments[1] = 'new value';
الكائن arguments
ليس مصفوفةً Array
، لكنه شبيه بالمصفوفات، أي أنَّه لا يملك أيّة خاصية من خاصيات Array
باستثناء length
. أي أنَّه لا يملك الدالة pop
، لكن يمكن تحويله إلى مصفوفة حقيقة:
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);
// ES2015
const args = Array.from(arguments);
يمكنك استخدام الكائن arguments
إذا استدعيتَ دالةً ومررتَ إليها وسائط أكثر من الوسائط التي صُرِّحَ أنَّها تقبلها. هذه التقنية مفيدة للدوال التي يمكن تمرير عدد مختلف من الوسائط إليها. يمكنك استخدام الخاصية arguments.length
لمعرفة عدد الوسائط المُمرَّرة إلى الدالة، ثم معالجة كل وسيط بالوصول إليه من كائن arguments
. أما لمعرفة عدد المُعاملات التي تقبلها الدالة عند التصريح عنها، فاستخدم الخاصية Function.length
.
استخدام المعامل typeof
يُعيد المعامل typeof
القيمة object
عند استعماله على الكائن arguments
نفسه:
console.log(typeof arguments); // 'object'
أما استعمال المعامل typeof
على الوسائط فسوف يعيد نوع قيمة الوسيط:
console.log(typeof arguments[0]);
استخدام معامل النشر مع الكائن arguments
يمكنك أيضًا استخدام الدالة Array.from()
أو معامل النشر (spread operator) لتحويل الكائن arguments
إلى مصفوفة حقيقة:
var args = Array.from(arguments);
var args = [...arguments];
الخاصيات
arguments.callee
الإشارة إلى الدالة التي يجري تنفيذها حاليًا.
arguments.caller
الإشارة إلى الدالة التي استدعت الدالة التي يجري تنفيذها حاليًا، هذه الخاصية محذوفة وغير مدعومة في جميع المتصفحات لأسباب أمنية.
arguments.length
الإشارة إلى عدد الوسائط المُمرَّرة إلى الدالة.
أمثلة
تعريف دالة تجمع أكثر من سلسلة نصية
المثال الآتي يُعرِّف دالةً تجمع أكثر من سلسلةٍ نصيةٍ مع بعضها بعضًا؛ الوسيط الوحيد المُعرَّف عند التصريح عن هذه الدالة هو الفاصل الذي يفصل بين العناصر التي ستُجمَع في السلسلة النصية:
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);
return args.join(separator);
}
يمكنك تمرير أي عدد من الوسائط إلى هذه الدالة:
// "red, orange, blue"
myConcat(', ', 'red', 'orange', 'blue');
// "elephant; giraffe; lion; cheetah"
myConcat('; ', 'elephant', 'giraffe', 'lion', 'cheetah');
// "sage. basil. oregano. pepper. parsley"
myConcat('. ', 'sage', 'basil', 'oregano', 'pepper', 'parsley');
تعريف دالة تنشئ قوائم HTML
المثال الآتي يُعرِّف دالةً تُنشِئ سلسلةً نصية فيها عناصر HTML اللازمة لإنشاء قائمة. المعامل الوحيد الرسمي في هذه الدالة هو سلسلةٌ نصيةٌ قيمتها "u
" لإنشاء قائمة غير مرتبة (<ul>
) أو "o
" لإنشاء قائمة مرتبطة (<ol>
):
function list(type) {
var result = '<' + type + 'l><li>';
var args = Array.prototype.slice.call(arguments, 1);
result += args.join('</li><li>');
result += '</li></' + type + 'l>'; // نهاية القائمة
return result;
}
يمكنك تمرير أي عدد من الوسائط إلى هذه الدالة:
var listHTML = list('u', 'One', 'Two', 'Three');
// "<ul><li>One</li><li>Two</li><li>Three</li></ul>"
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .