السلسلة والرقم منطقي
سيتم تحويل نوع JavaScript إلى النوع المقابل وفقًا للمهمة.
var str = "" ؛ ALERT (typeof (str)) ؛ // stringstr = ؛ Alert (typeof (str)) ؛ // numbervar sum = str + ؛ //+برنامج رقمين لإضافة تنبيه (SUM) ؛ //
هذا أكثر وضوحا ، ويمكن حساب القيمة في لمحة. ولكن يرجى الاطلاع على التحويل التالي
var sum = "" + "" ؛ Alert (typeof (sum)) ؛ // stringalert (sum) ؛ // var sum = "" + ؛ Alert (typeof (sum)) ؛ // stringalert (sum) ؛ // var sum = + "" ؛ التنبيه (typeof (sum)) ؛ // stringalert (typeof (sum)) ؛ // var div = "" "/" "؛ Alert (typeof (area)) ؛ // numberalert (typeof (sub)) ؛ // var sub = "" - "" ؛ Alert (typeof (sub)) ؛ // numberalert (sub) ؛ // var div = ""/"" ؛ Alert (typeof (area)) ؛ // numberalert (typeof (div)) ؛ // numberalert (div) ؛ //.
إذا كان نوع الرقم ونوع السلسلة "+" ، فسيتم تحويل الرقم مباشرة إلى سلسلة
ما سبق "+" هو مميز جدا. إذا كان - ، * ، / ؛ ثم ما هو النوع الذي سيتم تحويله إلى النهاية؟
var area = "" * "a" ؛ ALERT (typeof (area)) ؛ // numberalert (area) ؛ // nanvar sub = "a" - "؛ alert (typeof (sub)) ؛ // nansub =" a " - ؛ alert (typeof (sub)) ؛ (div)) ؛ // nandiv = "a"/؛ Alert (typeof (div)) ؛ // nan
على النحو الوارد أعلاه - ، * ، / هي الحساب في العدد. لا يمكن للسلسلة والرقم إجراء حسابات ، لذلك قيمها نان. رقم النوع.
var a = true ؛ Alert (typeof (a)) ؛ // booleanvar b = "true" ؛ var ab = a + b ؛ ALERT (typeof (ab)) ؛ // stringalert (ab) ؛ // truetruealert (a == b) ؛ // false
Boolean و String ، يتم تحويل أنواع منطقية تلقائيًا إلى سلسلة "True" ، ولكن لماذا لا تساوي B
لنلقي نظرة على هذا المثال:
var c = "" ؛ ALERT (typeof (c)) ؛ // stringvar d = ؛ ALERT (typeof (d)) ؛ // numberalert (c == d) ؛ // true
يتم تقديم مبدأ التحويل هنا: (للرجوع إليه)
1. إذا كان المعامل منطقية ، فقم بتحويله إلى قيمة رقمية قبل مقارنة المساواة - خطأ إلى 0 وصحيح إلى 1 ؛
2. إذا كان أحد المعاملين عبارة عن سلسلة والمشغل الآخر هو قيمة رقمية ، فسيتم تحويل السلسلة إلى قيمة رقمية قبل مقارنة المساواة ؛
3. إذا كان أحد المعامل هو كائن ولم يكن المعامل الآخر ، فسيتم استدعاء طريقة ValueOF () للكائن ومقارنة قيمة النوع الأساسي الذي تم الحصول عليه وفقًا للقواعد السابقة.
ثم عند مقارنة الأوتار والأنواع المنطقية ، سيكون ذلك:
يحدث هذا التحويل: يتحول Boolean True أولاً إلى الرقم 1 ، ثم يتحول إلى السلسلة "1" ، ثم يقارن. يجب أن تكون النتيجة خاطئة.
NULL والرقم رقم منطقي غير محدد
var a = null ؛ Alert (typeof (a)) ؛ // objectvar b = "hello" ؛ var ab = a + b ؛ ALERT (typeof (ab)) ؛ // stringalert (ab) ؛ // nullhellovar c = ؛ var ac = a * c ؛ Alert (typeof (ac)) ؛ // numberalert (ac) ؛ // if (a) // false {} else {Alert ("false") ؛} var u ؛ Alert (a == u) ؛ //حقيقيمن المثال المعطى ، يمكننا أن نرى:
يتم تحويل NULL تلقائيًا إلى السلسلة "NULL" في السلسلة ، التي تمثل الرقم 0 في الرقم ، وهو ما يعادل خطأ في الحكم المنطقي ، وهو نفسه غير محدد عند التعبير عن القيمة. لاحظ أنه == بدلاً من ===.
على الرغم من أن == يحول نوع المقارنة عند المقارنة ، فإن نوعه المتغير لا يتغير بسبب ==.