هناك ستة أنواع بيانات شائعة في JS: نوع السلسلة، والنوع Null، ونوع الرقم، والنوع المنطقي، ونوع الكائن.
1. ملاحظات على النوع
عندما يتعلق الأمر بأنواع البيانات، لا بد من ذكر نوع المشغل. ملاحظة:
1. typeof هو عامل وليس طريقة. على الرغم من أننا غالبًا ما نستخدم typeof() للحصول على نوع بيانات الكائن.
2. نوع null هو كائن (وذلك لأن null هو مرجع كائن فارغ)، ونوع الوظيفة هو وظيفة.
انسخ رمز الكود كما يلي:
تنبيه (نوع فارغ)؛ // كائن الإرجاع
عرض الدالة (){
تنبيه("عرض توضيحي");
}
تنبيه (نوع العرض التوضيحي) // وظيفة العودة
2. قم بتعيين القيم الأولية لمتغيرات الكائن لأنواع البيانات المختلفة
لاحظ أنه إذا كان متغير الكائن من النوع Object لا يعرف ما يجب تعيينه في البداية، فلا تستخدم var demo={};
انسخ رمز الكود كما يلي:
فار d2=null;
d2={'مفتاح':"شيت"};
var d3='';//سلسلة افتراضية
var d4=0; // تم تعيين القيمة الأولية لنوع الرقم على 0
var d5=null; // تعيين القيمة الافتراضية الأولية لنوع الكائن
3. الفرق والنقاط التي يجب ملاحظتها بين غير محدد وفارغ
1. إذا استخدمت "==" للمقارنة، فإنهما متساويان لأنهما يقارنان القيم.
2. هناك طريقتان للتمييز بينهما (أساسهما هو مقارنة أنواع البيانات الخاصة بهما)
1) استخدم typeof للتمييز بينهما
2) استخدم المتطابق "===": المقارنة تكون بين القيمة ونوع البيانات، ولن يتم إرجاع صحيح إلا إذا كانت جميعها متماثلة.
انسخ رمز الكود كما يلي:
تنبيه (غير محدد == فارغ)؛
تنبيه (نوع غير محدد == نوع فارغ)؛
تنبيه (غير محدد === فارغ)؛
4. ملاحظات على منطقية
1. المقارنة بين صحيح و1 هي نفسها، والمقارنة بين خطأ و0 هي نفسها (إنها مقارنة "==")، لأنه يتم تنفيذ تحويل نوع البيانات داخليًا، وتحويل صحيح إلى 1، وتحويل خطأ إلى 0. يوجد الكثير من البيانات داخل js. يعد التحويل التلقائي للأنواع أمرًا يجب على الجميع الانتباه إليه. وسيتم ذكر الكثير غيرها لاحقا. لكن استخدام "===" ليس متساويًا، لأن أنواع البيانات الخاصة بها غير متساوية.
2. عرض التحويل إلى Boolean. استخدم طريقة Boolean() لعرض التحويل. ما تحتاج إلى الانتباه إليه هو أنواع البيانات المختلفة، ومتى يتم التحويل إلى صحيح ومتى يتم التحويل إلى خطأ.
1) نوع السلسلة، طالما أنها ليست سلسلة فارغة، سيتم تحويلها إلى صحيح
2) نوع الرقم، طالما أنه ليس 0، حتى الرقم السالب سيتم تحويله إلى صحيح
3) سيتم تحويل نوع الكائن، طالما أنه ليس نوعًا فارغًا، إلى صحيح
4) سيتم تحويل النوع غير المحدد إلى خطأ
لن أقدم عرضًا، يمكنك تجربته بنفسك.
3. (***) يتم استدعاء الدالة المنطقية داخل () عبارة if().
5. نقاط يجب ملاحظتها حول نوع الرقم
1. لا يمكن للنوع العائم إجراء عمليات دقيقة.
انسخ رمز الكود كما يلي:
تنبيه (0.1 + 0.2)؛ // إرجاع 0.3000000000000000004
2. دعم عمليات التدوين العلمي
3. NaN (ليس رقمًا)
1) var d=0/0 ملاحظة: لن يتم الإبلاغ عن أي خطأ في js، ولكن سيتم إرجاع NaN.
2) يمكن الحصول عليها من خلال Number.NaN
3) أي عملية بين NaN وأي كائن سوف ترجع NaN.
4) يحدد isNaN() ما إذا كان NaN
انسخ رمز الكود كما يلي:
تنبيه(isNaN(NaN));//صحيح
تنبيه (isNaN (12))؛ // false
تنبيه (isNaN('123'));//خطأ: لأنه يمكن تحويل أرقام نوع السلسلة تلقائيًا إلى أرقام
تنبيه(isNaN('lew'));//صحيح
تنبيه(isNaN(false));//(*)خطأ: نظرًا لأنه يمكن تحويل القيمة المنطقية إلى رقم، يصبح صحيح 1، ويصبح خطأ 0
5) مبدأ التنفيذ الداخلي لـ isNaN(): الأمر نفسه ينطبق على الكائنات. مبدأ التنفيذ: يستدعي رئيس الوزراء طريقة valueOf () للكائن إذا كان من الممكن تحويله إلى رقم، فسيتم الحكم عليه مباشرة، وإذا لم يكن من الممكن تحويله إلى رقم، فسوف يستدعي طريقة toString () مرة أخرى. ومن ثم اختبار قيمة الإرجاع.
تستدعي valueOf() طريقة toObject() داخليًا. مبدأ التنفيذ الداخلي للطريقتين هو كما يلي:
انسخ رمز الكود كما يلي:
مربع فار = {
// تجاوز طريقة toString () لكائن الصندوق
إلىسلسلة:وظيفة(){
إرجاع "123" ؛
}
};
تنبيه (isNaN (صندوق))؛ // false
تنبيه (مربع)؛ // 123 يقوم التنبيه () داخليًا أيضًا باستدعاء قيمة الكائن () أولاً ثم يستدعي طريقة toString ().
6) تحويل أنواع البيانات الأخرى إلى نوع الرقم
يحتوي على ثلاث وظائف: Number(): يمكنه تحويل جميع أنواع البيانات؛ parseInt() وparseFloat() فقط لتحويل السلاسل.
انسخ رمز الكود كما يلي:
تنبيه(رقم('123'));//123
تنبيه (رقم ('0234'))؛//234
تنبيه(الرقم(صحيح));//1
تنبيه(رقم(خالي));//(**)0
// باستثناء ما سبق، كل شيء آخر يُرجع NaN.
تنبيه(الرقم(غير محدد))//NaN
مبدأ التنفيذ الداخلي لـ Number(): مثل isNaN()، يتم استدعاء valueOf() أولاً ثم يتم استدعاء toString(). . لذلك يمكن أن نتصور أن الأداء ضعيف نسبيا. . طالما أن الكائن المطلوب تحويله عبارة عن سلسلة، فاستدعاء parseInt() أو parseFloat() لأنهما لا يحتاجان إلى الحكم على النوع داخليًا.
ملاحظة عند استدعاء parseInt() وparseFloat(): يتم تحويل جزء السلسلة الذي يبدأ من الحرف الرقمي الأول إلى الرقم قبل الحرف الرقمي الأول إلى رقم.
انسخ رمز الكود كما يلي:
تنبيه(parseInt('123leb'));//123
تنبيه(parseInt('123leb345'));//123
تنبيه(parseInt('len234'));//NaN
عندما تكون المعلمة في parseInt() من النوع العائم، يتم الحصول على الجزء الصحيح فقط من الرقم.
انسخ رمز الكود كما يلي:
تنبيه(parseInt(56.12));//56
6. نوع السلسلة
1) (*هام*) السلاسل غير قابلة للتغيير في ECMAScript: لن تتغير السلاسل بعد إنشائها.
لتغيير متغير سلسلة تم تعيين قيمة له، قم أولاً بتدمير السلسلة الموجودة في المتغير، ثم املأ المتغير بسلسلة تحتوي على القيمة الجديدة.
انسخ رمز الكود كما يلي:
فار د='مرحبا';
d=d+' Shit';// عملية التنفيذ: قم أولاً بتعيين قيمة لـ "hello"، ثم امسح السلسلة في d، وقم بتسلسل السلاسل "hello" و "shit"، ثم قم بتعيين قيمة للمتغير d. (وبالتالي فإن قيمة السلسلة لن تتغير بمجرد إنشائها)
2) تقوم طريقة toString () بتحويل أنواع البيانات الأخرى إلى نوع سلسلة. ولكن إذا كنت تعمل على قيمة فارغة أو غير محددة، فسيتم الإبلاغ عن خطأ.
3) ومع ذلك، يمكن لأسلوب String () أيضًا تحقيق تأثير toString ()، ولكن يمكن أن يعمل على حالة فارغة وغير محددة.
المبدأ الداخلي: اتصل بـ toString() أولاً، وإذا كان من الممكن تحويلها إلى سلسلة، فسيتم إرجاع النتيجة مباشرة. لا، ثم احكم على ما إذا كانت فارغة أم غير محددة، ثم قم بإرجاع "فارغة" أو "غير محددة"
ملخص: إذا كنت تعلم أن المتغير لا يمكن أن يكون فارغًا أو غير محدد، فاستخدم toString()، وهو أكثر أداءً من String(). نظرًا لأن String() يجب أن تصدر أحكامًا داخلية، فإنها ستضر بالأداء.