تطوير المواقع الإلكترونية MEAN-Stack from A to Z التأسيس Level1
غالبا ما تحتوي لغات البرمجة علي أكثر من datatype للتعامل مع الأرقام و لكن في الـ JS لا يوجد إلا نوع بيانات واحد و هو number من خلاله نستطيع التعامل مع الأرقام أي أن هذا النوع من البيانات يتعامل مع الأرقام الصحيحة و الأرقام العشرية دون الحاجة لإستخدام أنواع مختلفة من أنواع البيانات كما في اللغات الأخرى أيضا هناك نوع جديد من أنواع البيانات التي أضيفت مؤخرا (ES11 (ECMAScript 2020)) للغة جافاسكريبت و هي bigInt و هو نوع وجد للتعامل مع الأرقام الكبيرة التي لا يستطيع النوع number التعامل معها
الفرق بين number و bigInt
كما ذكرنا من قبل أن الجافاسكريبت صممت في البداية للتعامل مع مهام بسيطة و لم يكن من ضمنها التعامل مع بيانات علمية و هي أكثر انواع البيانات التي تحتاج لإستخدام الأرقام الكبيرة وتمثيلها بشكل صحيح لذلك كان النوع number كان يحتوي على خاصية تسمي MAX_SAFE_INTEGER و هو أكبر رقم يمكن التعامل معه و هو 9,007,199,254,740,991 و لذلك ظهر نوع bigInt تتعامل مع الأرقام الأكبر و بالطبع يتم أستخدامه في حالات خاصة و لذلك سنتناول نوع البيانات number لأنه النوع الأكثر استخداما وشيوعاطريقة كتابة الأرقام
تدعم الـ JS أكثر من طريقة لكتابة الأرقام فرقم مثل 1000000 يمكن كتابته بالطرق التالية :
Code
console.log(1000000);
console.log(1_000_000);
console.log(1e6);
console.log(10**6);
طريقة تنسيق الأرقام
تقوم JS بتجاهل الأصفار بعد العلامة العشرية طالما لم تحتوي علي أرقام أخري غير الصفر
Code
console.log(100.00); // 100
Code
console.log(100.001);//100.001
Code
(100.0011111).toFixed(2) // 100.00
Code
100.0011111.toFixed(2)
Code
100..toFixed(2) // 100.00
Code
100.00.toString() //100
Code
100..toString(2) // 1100100
100..toString(8) // 144
100..toString(10) // 100
تحويل النصوص لأرقام
يمكن تحويل النصوص لأرقام بأكثر من طريقة مثل :
استخدام parseInt
Code
parseInt('100') // 100
Code
parseInt('100.55') // 100
Code
parseInt('100 hello') // 100
Code
parseInt('hello 100') // NaN
console.log(typeof NaN);
ستجد النتيجة number
يلاحظ أيضا أن JS لا تعتبر القيمة NaN لا تساوي نفسها , فمثلا إذا كتبنا الكود التالي
if(1000 === 1000){
console.log(true);
}
else
{
console.log(false);
}
ستكون النتيجة true حيث 1000 تساوي 1000 بالفعل و لكن اذا قمنا بإعادة كتابة الكود بهذه الطريقة
if(NaN === NaN){
console.log(true);
}
else
{
console.log(false);
}
ستجد أن النتيجة تكون false و ذلك لآن JS تعتبر أن NaN ليست دائما تحدث لنفس السبب فمثلا قد تكون نتيجة لمحاولة تحويل نص لرقم مثل
parseInt('hello') // NaN
أو نتيجة محاولة إجراء عملية حسابية بين رقم و بين نص مثل الكود التالي
console.log(100 * 'hi')
ستكون النتيجة أيضا NaN (مهما كانت العملية الحسابية المراد تحقيقها إلا عملية الجمع ففي تلك الحالة تعتبرها JS محاولة للصق نصين معا string concatenation مثل الكود التالي)
console.log(100 + 'hi') // 100hi
و لذلك تعتبر JS أن NaN لا تساوي NaN نظرا لآنها قد تكون ناتجة من حالات مختلفة.
استخدام parseFloat
و تستخدم لتحويل الأرقام ذات الكسور مثل
Code
parseFloat('100.55') // 100.55
Code
parseFloat('100.00') // 100
Code
parseFloat('100.55 hi') // 100.55
الـ Number Object
يستخدم أيضا للتعامل مع الأرقام حيث يقوم الـ constractor الخاص به بإنشاء رقم من القيمة التي يتم إعطاءها له مثل
Code
Number('100') // 100
Code
Number(true) // 1
Number(false) // 0
Number(null) //0
Code
Number('100 hi') // NaN
Code
Number('100.00') // 100
Code
Number('100.50') // 100.5
Code
let myValue = 100;
console.log( Number.isInteger(myValue)); // true
let myValue = -100;
console.log( Number.isInteger(myValue)); // true
let myValue = 100.5;
console.log( Number.isInteger(myValue)); // false
Code
let myValue = ‘hi’;
console.log( Number.isInteger(myValue)); // false
let myValue = true;
console.log( Number.isInteger(myValue)); // false
Code
Number.isNaN(NaN) // true
Number.isNaN(100) // false
Number.isNaN(‘100’) // false
Number.isNaN('hi') // false
Code
Number.isNaN(Number('hi'))
isNaN('hi') // true
isNaN('100') // false
Code
console.log(Number.MAX_SAFE_INTEGER) // 9007199254740991
Code
console.log(Number.MIN_SAFE_INTEGER) // -9007199254740991
Code
console.log(Number.MAX_VALUE) //1.7976931348623157e+308
console.log(Number.MIN_VALUE) // 5e-324
Code
console.log(Number.MAX_VALUE + 1) //1.7976931348623157e+308
الـ Infinity
أيضا من الأرقام الخاصة مثل الـ NaN هناك رقم خاص أخر هو الـ Infinity و يمكن التأكد من كونه رقم عن طريق الكود التالي
Code
console.log(typeof Infinity) // number
Code
console.log(100/ 0) // Infinity
Code
console.log(Number.MAX_VALUE * 2 ) // Infinity
Code
console.log(100 / -0 ) // Infinity
الـ Math
تتضمن الـ JS جزء خاص بالمعاملات الرياضية حيث يوفر العديد من العمليات المستخدمة في الرياضيات و أيضا الـ properties الخاصة بالرياضيات من أمثلتها الـ property الخاص بثابت الدائرة ط أو PI و يمكن الوصول له عن طريق
Code
console.log(Math.PI ) // 3.141592653589793
Code
console.log(Math.pow(2,3) ) // 8
Code
console.log(Math.round(100.5)) // 101
console.log(Math.round(100.6)) // 101
console.log(Math.round(100.4)) // 100
Code
console.log(Math.ceil(100.5)) // 101
console.log(Math.ceil(100.6)) // 101
console.log(Math.ceil(100.4)) // 101
Code
console.log(Math.floor(100.5)) // 100
console.log(Math.floor(100.6)) // 100
console.log(Math.floor(100.4)) // 100
console.log(Math.trunc(100.5)) // 100
console.log(Math.trunc(100.6)) // 100
console.log(Math.trunc(100.4)) // 100


