Math.random()‎

من موسوعة حسوب

الدالة Math.random()‎ تعيد عددًا عشوائيًا زائفًا (pseudo-random number) عشريًا بين 0 (دون تضمين 0) و 1 (مع تضمين 1)، يمكنك بعد ذلك تحويل العدد الناتج إلى المجال الذي تريده. لاحظ أنَّ البذرة (seed) المُستخدمة في خوارزمية توليد الأرقام العشوائية سيختارها مُحرِّك JavaScript، ولا يمكن ضبطها من المستخدم.

تحذير: الدالة Math.random()‎ لا توفِّر أعدادًا عشوائيةً يمكن استخدامها في التشفير. لذا لا تستخدمها لأيّ غرض يتعلق بالحماية.

البنية العامة

Math.random()

القيمة المعادة

عددٌ عشوائيٌ زائفٌ (pseudo-random number) عشريٌ بين 0 (دون تضمين 0) و 1 (مع تضمين 1).

الوصف

لمّا كانت الدالة random هي دالةٌ ساكنة (static method) تابعةٌ للكائن Math، فيجب عليك استخدامها دومًا بالشكل Math.random()‎، إذ لا تستطيع استخدامها كجزء من كائن Math خاص بك (تذكر أنَّ الكائن Math ليس له دالةٌ بانية).

أمثلة

إعادة عدد عشوائي بين 0 و 1

function getRandom() {
  return Math.random();
}

إعادة عدد عشوائي بين قيمتين

الدالة الموجودة في المثال الآتي تُعيد عددًا عشوائيًا بين قيمتين محددتين. والقيمة المعادة ستكون أكبر من أو تساوي min لكن أصغر تمامًا من max:

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

إعادة عدد عشوائي صحيح بين قيمتين

الدالة الموجودة في المثال الآتي تُعيد عددًا عشوائيًا صحيحًا بين قيمتين محددتين. والقيمة المعادة ستكون أكبر من أو تساوي min لكن أصغر تمامًا من max:

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}

قد يخطر ببالك استخدام الدالة round هنا، لكن فعل ذلك قد يؤدي إلى جعل الأرقام العشوائية تتبع نمط توزيع غير منتظم، وهذا قد لا يكون مقبولًا حسب احتياجاتك؛ لذا من الأفضل استخدام الدالتين ceil و floor.

إعادة عدد عشوائي صحيح بين قيمتين مع تضمين تلك القيمتين

صحيحٌ أنَّ الدالة getRandomInt()‎ الموجودة أعلاه تُضمِّن القيمة الدنيا في النتائج، لكنها تستثني القيمة القصوى. يمكنك استخدام الدالة getRandomIntInclusive()‎ الموجودة في الشيفرة الآتية لتضمين القيمة الدنيا والقصوى:

function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

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