اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

كدالة مضمنة في جافاسكربت، يمكنك الإستعانة بالدالة typeof التي تقوم بتحديد نوع البيانات الممرر إليها مباشرة، تقوم بإعادة أحد النتائج:

typeof {name:'Hsoub', type:'academy'} 
=> Object

typeof new Date()
=> Date

typeof [1,2] 
=> Array

typeof "string" 
=> String

typeof 1.21 
=> Number

typeof true
=> Boolean

typeof null
=> null

typeof x
=> undefined

أما ولخدمة غرضك بالضبط فستحتاجين بعض التخصيص.

يمكنك عمل ذلك وفق المنطق التالي : نقوم بعمل دالة تقوم بـ:

  • تحويل أي سلسلة نصية تمرر إليها إلى رقم Number. 
  • في كل ما هو ليس رقم أو معبر به عن رقم يتم إرجاع NaN. 
  • في حالة المعامل الممرر رقم : يتم التحقق ما ان كان هذا الرقم double أو integer.
  • في حالة لم يكن المعامل الممرر رقم : يتم التحقق من نوعه عن طريق typeof. 

مثال عملي: 

function getType(data){
    var n = Number(data);
    if(! Number.isNaN(n)){
       if(n === +n && n !== (n|0)) return 'double';
       
       if(n === +n && n === (n|0)) return 'integer'; 
    }
    
    else{
       return typeof data;
    }
}

getType(1); // integer
getType("1"); // integer
getType(1.5); // double
getType("1.5"); // double
getType("sara"); // string
getType([2,4,42]); // array

كتابة أكثر اختصارا:

function getType(data){
    var n = Number(data);
    
    return (n === +n && n !== (n|0)) ? 'double' :
       
    (n === +n && n === (n|0)) ? 'integer' : typeof data;
}

تعرف أكثر عن  الأعداد (numbers) في جافاسكربت.

  • 0
نشر
بتاريخ 33 دقائق مضت قال Shahad Mohammad:

فهمت الكود شكرا لكن ممكنتوضح معنى هذا السطر


(n === +n && n !== (n|0) ?

ما معنى ان نضع + أمام المتغير n ؟ 

وما معنى (n|0) 

وشكرا 

تماثل الكتابة هاته:

(n === +n && n !== (n|0)) ?

نفس الكتابة:

if(n === +n && n !== (n|0)){


}

أما عن المعاملين + و | ف:

  • المعامل | في n|0 يستعمل بنفس غرض OR أو || ولكنه يستهدف الأعداد الصحيحة integers، فهاته الكتابة n|0 تعني قم بإعادة 0 في حالة لم يكن العدد n صحيحا integer.
  • المعامل + في n+ فهو ليس إلا إشارة موجبة للتحقق من أن نوع n يماثل نوع n موجبا، فهاته الكتابة n+ تعني موجب n.   

لنقم بتجزئة الشرط حتى نقوم بفهمه جيدا:

if(n === +n && n !== (n|0)) return 'double';

/*//////////////////// لشطر الأول*/
n === +n

التحقق من ما ان كانت قيمة n تساوي القيمة الموجبة لـ n.
فيما يعني ، أنه ان كان قيمة عددية فسيتم إعادة خطأ وإلا فإن الشرط محقق وصحيح.

/*//////////////////// لشطر الثاني*/
n !== (n|0)

التحقق من ما ان كان نوع n مساويا لناتج n|0 (يكون الناتج n في حالة كون n عددا صحيحا أو صفرا فيما غير ذلك).

إستنتاجات:

  • n مساو لقيمته الموجبة ===> n عدد. (مثال : 5 مساو لـ 5+ و 2.1 أيضا مساو 2.1+)
  • n غير مساو لقيمته الموجبة ===> n ليس عددا. ("hsoub" ليس مساويا لـناتج "hsoub"+ والتي هي NaN).

 

  • نوع n مساو لناتج n|0 (تذكر: n أو صفر) ===> n عدد صحيح integer. (مثال: 5 مساو لـ ناتج 0|5 والذي هو 5 لأن هذا الأخير صحيح).
  • نوع n غير مساو لناتج n|0 (تذكر: n أو صفر)  ===>  n عدد عشري double. (مثال: 2.1 غير مساو لناتج 0|2.1 والذي هو 0 لأن هذا الأخير عشري).

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...