الكائن arguments في JavaScript

من موسوعة حسوب
< JavaScript
مراجعة 04:04، 17 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

الكائن 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
الدعم الأساسي نعم نعم نعم نعم نعم

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