أولاً ، دعونا نفعل بعض الأسئلة أولاً! من أجل التوحيد ، لا أخلط هذه الأسئلة. في أسئلة المقابلة ، غالبًا ما أخلط هذه الأسئلة ، مما يجعلك أكثر حيرة. لجعلها أكثر ملاءمة للمظاهرة ، كتبت بعض الأسئلة في الوحدات النمطية هنا ، حتى تتمكن من قراءتها!
التحويل الضمني لسلاسل المشغل
الضرب
console.dir ("--------------------------") ؛ console.dir (5*"5") ؛ console.dir (5*"a") ؛ console.dir (5*nan) ؛ console.dir (5*null) ؛ console.dir (5*غير محدد) ؛ console.dir (5*5) ؛ console.dir("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------قسم
console.dir ("----------------------") ؛ console.dir (5/"5") ؛ console.dir (5/"a") ؛ console.dir (5/nan) ؛ console.dir (5/null) ؛ console.dir (null/5) ؛ console.dir (5/undefined) ؛ console.dir (5/5) ؛ console.dir (5/0) ؛ console.dir (0/5) ؛ console.dir (0/0) ؛ console.dir ("--------------------------") ؛ console.dir ("---------------------------") ؛خذ ما تبقى وابحث عن النموذج
console.dir ("---------------------------") ؛ console.dir (16 ٪ "5") ؛ console.dir (5 ٪ "A") ؛ console.dir (5 ٪ nan) ؛ console.dir (5 ٪ null) ؛ console.dir (null ٪ 5) ؛ console.dir (5 ٪ غير محددة) ؛ console.dir (5 ٪ 5) ؛ console.dir (5 ٪ 0) ؛ console.dir (0 ٪ 5) ؛ console.dir (0 ٪ 0) ؛ console.dir("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------إضافة
console.dir ("-----------------------") ؛ console.dir (16+ "5") ؛ console.dir (5+ "a") ؛ console.dir (5+nan) ؛ console.dir (5+null) ؛ console.dir (5+غير محدد) ؛ console.dir (5+5) ؛ console.dir ("مجموع رقمين هو"+5+5) ؛ console.dir ("مجموع رقمين هو"+(5+5)) ؛ Console.dir ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------الطرح
console.dir ("----------------------") ؛ console.dir (16- "5") ؛ console.dir (5- "A") ؛ console.dir (5-Nan) ؛ console.dir (5-null) ؛ console.dir (5-endefined) ؛ console.dir (5-5) ؛ console.dir (5-true) ؛ console.dir (5- "true) ؛ console.dir (5-" ") ؛ console.dir (" الفرق بين رقمين هو "+5-5) ؛ console.dir (" الفرق بين رقمين هو "+(5-5)) console.dir ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------المشغلين العلائقيين
console.dir ("----------------------") ؛ console.dir (16> "5") ؛ console.dir ("16"> "5") ؛ console.dir (5 <"a") ؛ console.dir (5> = nan) ؛ console.dir (5 <nan) ؛ console.dir (nan> = nan) ؛ console.dir (5> = null) ؛ console.dir (5> = غير محدد) ؛ console.dir (5> = 5) ؛ console.dir (5> = true) ؛ console.dir (5> = "true") ؛ console.dir (5> = "") ؛ console.dir ("brick"> "Alphabet") ؛ console.dir ("brick"> "Alphabet") ؛ console.dir ("---------------------") ؛الضرب
console.dir (5*"5") ؛ // 25 وحدة التحكم.
دعنا نتحدث عن مبدأ التحويل الضمني للضرب:
1. إذا كانت القيمتين هما أرقام ، فعليك إجراء عمليات الضرب مباشرة. (أعتقد أن الجميع يمكنهم القيام بذلك ، تمامًا مثل الرياضيات في المدارس الابتدائية ، ويجب عليك الانتباه إلى رموز الأرقام). إذا تجاوزت قيمة المنتج نطاق التمثيل العددي لـ ECMASCRIPT ، فإن إرجاع Infinity (Infinite موجب) أو -infinity (اللانهائي السلبي)
2. إذا كان الرقم نان ، فإن النتيجة هي نان
3. إذا تم ضرب اللانهاية مع 0 ، فإن النتيجة هي NAN
4. إذا كان أحد المشغلين هو رقم والآخر ليس قيمة رقمية ، فاستخدم أولاً وظيفة الرقم () لتحويلها ، وضرب القيمة المحولة بالرقم. إذا ظهرت النتيجة المحولة نان ، فإن النتيجة هي نان.
قسم
console.dir (5/"5") ؛ // 1 تحويل الأحرف إلى أرقام وتقسيم وحدة التحكم. 0/5 هو 0 وحدة التحكم.
دعنا نتحدث عن مبدأ التحويل الضمني في التقسيم:
على غرار الضرب ، الوحيدة الأخرى هي أن النتيجة 0/0 هي NAN
خذ ما تبقى وابحث عن النموذج
الشيء الأكثر شيوعًا في المشروع هو العثور على أرقام غريبة وحتى. غالبًا ما نستخدم رقمًا مع 2 لحساب التوازن. إذا كانت النتيجة 0 ، فإن الرقم هو رقم زوجي ، وإذا كانت النتيجة 1 ، فإن الرقم هو رقم فردي.
تحقق من الموضوع أعلاه:
console.dir (16 ٪ "5") ؛ // 1 قم بتحويل السلسلة 5 إلى 5 إلى الرقم () ثم احسب وحدة التحكم المتبقية (5 ٪ "A") ؛ // console.dir (5 ٪ nan) ؛ // nan console.dir (5 ٪ null) ؛ // NAN Convert NULL من خلال الرقم () ، والنتيجة هي 0 ، ثم حساب 5 ٪ 0 ، والنتيجة هي nan console.dir (null ٪ 5) ؛ // 0 كما هو مذكور أعلاه 0 ٪ 5 ، والنتيجة هي 0 وحدة التحكم (5 ٪ غير محددة) ؛ // console.dir (5 ٪ 5) ؛ // 0 console.dir (5 ٪ 0) ؛ // nan console.dir (0 ٪ 5) ؛ // 0 console.dir (0 ٪ 0) ؛ // nanconsole.dir (Infinity ٪ Infinity) ؛ // nanconsole.dir (5 ٪ Infinity) ؛ // 5 console.dir (Infinity ٪ 5) ؛ // نان
دعنا نتحدث عن مبدأ التحويل الضمني للمبقى:
مثل الضرب ، اسمحوا لي أن أتحدث عن شيء مميز! نعلم جميعًا مفاهيم الأرباح والقسارات ، التي تعلمناها في المدرسة الابتدائية.
1.
2. المقسوم هو قيمة محدودة ، والمقاطع هو 0 ، ثم النتيجة هي NAN
3.
4. توزيعات الأرباح هي قيمة محدودة ، والتوزيعات هي قيمة لا حصر لها ، والنتيجة هي مقسوم.
5. الرقم المقسم هو 0 ، والنتيجة هي 0
الطرح
ألق نظرة على المثال أعلاه!
console.dir (16- "5") ؛ // 11 وحدة التحكم. console.dir (5- "true") ؛ // nan console.dir (5-"") ؛ // console.dir (5-infinity) ؛ //-Infinity Console.dir (Infinity-Infinity) ؛ // nan console.dir ("الفرق بين رقمين هو"+5-5) ؛ // nan console.dir ( الأرقام 0دعنا نتحدث عن مبدأ التحويل الضمني للطرح:
تمامًا مثل ما سبق ، لن أتحدث عن نفس الشيء ، سأتحدث عن الطرح الفريد.
1.
2. -infinity -Infinity نتيجة -
3. نتيجة رقم ناقص اللانهاية - اللانهاية
4. اللانهاية-(-اللانهاية) والنتيجة هي اللانهاية
5. إذا كان المعامل كائنًا ، فسيتم استدعاء طريقة قيمة الكائن. إذا كانت النتيجة نان ، فإن النتيجة هي نان. إذا لم تكن هناك طريقة قيمة ، فاستدعاء طريقة TOSTRING () وتحويل السلسلة الناتجة إلى قيمة رقمية.
المشغلين العلائقيين
يعود المشغلون العلائقيون بشكل موحد صحيح أو خطأ
console.dir (16> "5") ؛ // true console.dir ("16"> "5") ؛ // false console.dir (5 <"a") ؛ // false console.dir (5> = nan) ؛ // false console.dir (5 <nan) ؛ // false console.dir (nan> = nan) ؛ console.dir (5> = غير محدد) ؛ // false console.dir (5> = 5) ؛ // true console.dir (5> = true) ؛ // true console.dir (5> = غير محدد) ؛ // console.dir (5> = 5) ؛ console.dir (5> = "") ؛ // true console.dir ("brick"> "alphabet") ؛ // false قيمة ترميز السلسلة لـ B هي 66 ، في حين أن ترميز السلسلة A Is 97. لذلك ، وحدة التحكم الخاطئة ("brick"> "alphabet") ؛دعنا نتحدث عن مبدأ التحويل الضمني للمشغلين العلائقيين:
لا يزال كما هو مذكور أعلاه ، لن أقول نفس الشيء.
إذا كان الرقم المقارنان هما سلاسل ، فسيتم مقارنة القيم المشفرة للسلسلة المقابلة للسلسلة.
عملية الإضافة
السبب في أنني قلت أخيرًا أن التحويل الضمني لعمليات الإضافة هو أن التحويل الضمني لعمليات الإضافة يختلف عن عملياته السابقة. جميع رموز المشغل السابقة ، طالما واحد هو رقم ، يستخدم الآخر أيضًا الرقم () لتحويل الأرقام بشكل افتراضي. عملية الإضافة مختلفة. طالما أن إحدى عمليات الإضافة عبارة عن سلسلة ، سيتم تحويل الآخر أيضًا إلى سلسلة ثم يتم تنفيذ الربط السلسلة!
console.dir (16+ "5") ؛ // 156 console.dir (5+ "a") ؛ // 5a console.dir (5+nan) ؛ // nan console.dir (5+null) ؛ // 5 console.dir ('5'+null) ؛ console.dir (5+5) ؛ // 10 console.dir ("مجموع رقمين هو"+5+5) ؛ // مجموع رقمين هو 55 وحدة التحكم.دعنا نتحدث عن مبدأ التحويل الضمني لمشغلي الإضافة:
1. واحد هو سلسلة ، وسيتم تحويل آخر أيضا إلى سلسلة للربط. إذا كان أحدهما عبارة عن سلسلة والآخر لاغية أو غير محددة ، فسيقوم إضافة أو غير محدد بالتعرف على طريقة String () للحصول على السلسلة "NULL" أو "غير محددة" ، ثم تقسيمها.
2. إذا تمت إضافة رقم مع NULL أو غير محدد ، فسيتم تحويل فارغ أو غير محدد إلى رقم () ثم تمت إضافته.
3. المبادئ المتبقية تشبه الآخرين ، لذلك لن أقول الكثير.
التحويل الضمني بيكال
قم بتشغيل الكود التالي مرة واحدة ، وأعتقد أنك ستفهمه بشكل طبيعي ~
var a ؛ console.dir (0 == false) ؛ // trueconsole.dir (1 == true) ؛ // trueconsole.dir (2 == {valueof: function () {return 2}}) ؛ // trueconsole.dir (a == nan) ؛ غير محدد) ؛ // falseconsole.dir (1 == غير محدد) ؛ // falseconsole.dir (2 == {toString: function () {return 2}}) ؛ // trueconsole.dir (undefined == null) ؛ // trueconsole.dir (null == 1) ؛ toString: function () {return 1} ، valueof: function () {return []}} == 1) ؛ // trueconsole.dir (1 == "1") ؛ // trueconsole.dir (1 === "1") ؛ // false