اللافتات label
في JavaScript
التعبير البرمجي label
يمكن أن يُستخدَم مع التعبير البرمجي break
أو continue
، وهو يوضع قبل التعابير البرمجية لإضافة لافتة (مُعرِّف) لها يمكن الإشارة إليها.
لاحظ أنَّ من غير الشائع استخدام حلقات تكرار مع لافتات (labels)، وتُستخدَم عادةً الدوال بدلًا القيام بقفزات بين حلقات التكرار.
البنية العامة
label :
statement
label
لافتة للتعبير البرمجي، ويمكن أن تكون أيّ مُعرِّف في JavaScript صالح (وليس كلمةً محجوزةً).
statement
التعابير البرمجية التي ستُضاف اللافتة إليها، ويمكن استخدام التعبير البرمجي break
مع أيّ تعبير برمجي له لافتة، أما التعبير continue
فيمكن أن يُستخدَم مع أيّة حلقات تكرار لها لافتة.
الوصف
يمكنك استخدام لافتة (label) لإضافة مُعرِّف إلى حلقة تكرار، ثم استخدام التعبير break
أو continue
للإشارة إلى أنَّ إيقاف تنفيذ حلقة التكرار أو إكمال تنفيذها مع التكرار التالي.
لاحظ أنَّ JavaScript لا تملك التعبير البرمجي goto
، ولا يمكنك استخدام اللافتات إلا مع التعبير break
أو continue
.
في نمط strict لن تتمكن من استخدام السلسلة النصية "let"
كلافتة، فسترمي الخطأ SyntaxError
(لأنَّ let
هو مُعرِّف محجوز في JavaScript).
أمثلة
استخدام حلقة for
لها لافتة مع continue
لاحظ كيف عرّفنا لافتةً لحلقة التكرار الأولى (loop1
) وحلقة التكرار الثانية (loop2
)، وكيف استخدمنا التعبير البرمجي continue
داخل حلقة التكرار الثانية للانتقال إلى حلقة التكرار الأولى مباشرةً.
انتبه إلى عدم وجود الناتج i = 1, j = 1
ولا i = 1, j = 2
:
var i, j;
loop1:
for (i = 0; i < 3; i++) { // "loop1"
loop2:
for (j = 0; j < 3; j++) { // "loop2"
if (i === 1 && j === 1) {
continue loop1;
}
console.log('i = ' + i + ', j = ' + j);
}
}
// الناتج
// "i = 0, j = 0"
// "i = 0, j = 1"
// "i = 0, j = 2"
// "i = 1, j = 0"
// "i = 2, j = 0"
// "i = 2, j = 1"
// "i = 2, j = 2"
المثال الآتي فيه مصفوفةُ عناصر ومصفوفة اختبارات، وسنحصي عدد العناصر التي تجاوزت جميع الاختبارات:
var itemsPassed = 0;
var i, j;
top:
for (i = 0; i < items.length; i++) {
for (j = 0; j < tests.length; j++) {
if (!tests[j].pass(items[i])) {
continue top;
}
}
itemsPassed++;
}
استخدام حلقة for
لها لافتة مع break
لاحظ الاختلافات بين المثال الآتي والمثال في القسم السابق (الذي استعملنا فيه التعبير continue
):
var i, j;
loop1:
for (i = 0; i < 3; i++) { // "loop1"
loop2:
for (j = 0; j < 3; j++) { // "loop2"
if (i === 1 && j === 1) {
break loop1;
}
console.log('i = ' + i + ', j = ' + j);
}
}
// الناتج
// "i = 0, j = 0"
// "i = 0, j = 1"
// "i = 0, j = 2"
// "i = 1, j = 0"
استخدام قسم كتلي له لافتة مع break
يمكنك استخدام اللافتات مع الأقسام الكتلية البسيطة، لكن لا يُسمَح إلا باستخدام التعبير break
معها:
foo: {
console.log('face');
break foo;
console.log('this will not be executed');
}
console.log('swap');
// "face"
// "swap
استخدام لافتات عند التصريح عن الدوال
بدءًا من ECMAScript 2015، يمكن استخدام لافتات عند التصريح عن الدوال (function declarations) وذلك في نمط non-strict:
L: function F() {}
لكن ذلك سيرمي الخطأ SyntaxError
في نمط strict:
'use strict';
L: function F() {}
// SyntaxError: functions cannot be labelled
يجدر بالذكر أنَّ الدوال المولِّدة (generator functions) لا يمكن إضافة لافتات إليها في كلا النمطين:
L: function* F() {}
// SyntaxError: generator functions cannot be labelled
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 3rd Edition.