1. أولاً تقديم الأنواع الأصلية الخمسة
5 أنواع بدائية في JavaScript هي سلسلة ، رقم ، منطقية ، غير محددة ، فارغة
var name = "jack" ؛ var age = 32 ؛ var single = false ؛ var app ؛ //undefinedconsole.log (اسم thepeof) ؛ //stringConsole.log(ypeeof Age) ؛ //numberconsole.log (yepeof single) ؛ //booleanconsole.log (تطبيق yepeof) ؛ //undefinedconsole.log(typeof null) ؛ //هدف
وقد وجد أن الأنواع الأساسية الأربعة الأخرى باستثناء الفارغ يمكن تحديدها بواسطة typeof :
if (typeof name === "string") {name += "Zhang" ؛ } if (typeof age === "number") {Age ++ ؛ } if (typeof single === "boolean" && single) {...} if (typeof app === "undefined") {app = {} ؛ }لأن typeof null ستحصل على كائن ، استخدم === للكشف عن NULL مباشرة:
if (el === null) {...}2. كائن
تتضمن كائنات JavaScript كائنات مدمجة ( تاريخ ، regexp ، الخطأ ، إلخ) والكائنات المخصصة .
(لاحظ أنه على الرغم من أن الوظيفة والمصفوفة هي أيضًا كائنات مدمجة ، إلا أنها تمت مناقشتها بشكل منفصل في القسم التالي)
لا يمكن اكتشاف الكائنات باستخدام الأنواع الأساسية مثل الأنواع الأساسية ، لأن النتائج المكتشفة كلها كائن :
console.log (typeof new date ()) ؛ //OBjectConsole.log(yspeof new regexp ()) ؛ //OBjectConsole.log(ypeof new error ()) ؛ //OBjectConsole.log(ypeeof new person ()) ؛ //OBjectConsole.log(ypeeof new person ()) ؛ // باستخدام typeof لاكتشاف أن الكائن المخصص هو أيضًا كائن
لاستخدام مثيل بدلاً من ذلك لاكتشاف:
var date = new date () ؛ var reg = new regexp () ؛ var err = new error () ؛ var me = new person () ؛ if (date extryof date) {// date date year = date.getlyear () ؛ } if (reg extryof regexp) {// الكشف عن التعبير العادي reg.test (...) ؛ } if (erruteant erract error) {// detection request throw err ؛ } if (me eastyof person) {// detection custom jote ...} ولكن هناك مشكلة في الكائنات المخصصة ، على افتراض أن الشخص محدد في كل من Framea و FrameB من المتصفح. يتم تعريف كائن ME في Framea ، ويتم اكتشافه على أنه صحيح باستخدام me instanceof Person . ولكن عندما يتم تمرير الكائن المخصص لي إلى الإطار ، سيكون مثيل OF خطأ في الإطار.
كما هو مذكور في بداية هذا القسم ، على الرغم من أن الوظيفة والمصفوفة هي أيضًا كائنات مدمجة ، إلا أنها تترك إلى القسم التالي. والسبب هو أن الوظيفة والمصفوفة لها نفس المشكلات المذكورة أعلاه مثل الكائنات المخصصة. لذلك ، لا تستخدم الوظيفة والمصفوفة عمومًا مثيلًا
3. الوظيفة
قال ما سبق أن استخدام وظيفة الكشف عن مثيل لا يمكن أن يعبر الإطارات. لذلك ، يتم استخدام typeof للكشف ، والذي يمكن أن يكون إطارًا متقاطعًا:
var func = function () {} ؛ if (typeof func === 'function') {...}ومع ذلك ، فإن ie8 المستخدمة من نوعه للكشف عن وظائف DOM وسيحصل على كائن ، لذلك يستخدم IE8 في:
console.log (typeof document.getElementById) ؛ // object ، not functionConsole.log (typeof document.getElementSbyTagName) ؛ // object ، not functionConsole.log (typeof document.createElement) ؛ // Object ، not function // ie browsers قبل IE8 ، استخدم في اكتشاف ما إذا كانت وظيفة DOM مدعومة إذا ("getElementById" في المستند) {...} if ("getElementsByTagname" في المستند) {...} if (4. صفيف
قال ما سبق أن باستخدام مثيل للكشف عن هذه الصفيف لا يمكن أن يعبر الإطارات. قبل ES5 ، قمنا بتخصيص طرق الكشف. الطريقة الأكثر دقة: tostring التي تعتمد على الصفيف سوف تُرجع السلسلة الثابتة "[صفيف الكائن]" لاكتشاف :
دالة isarray (arr) {return object.prototype.toString.call (arr) === "[كائن صفيف]" ؛}هذه الطريقة دقيقة وأنيقة ، لذلك تم تبنيها من قبل العديد من المكتبات. أخيرًا ، تم تقديم Array كطريقة Isarray في ES5 ، في إشارة إلى MDN. الآن لا تحتاج إلى تخصيص طريقة الكشف ، ما عليك سوى استخدام Isarray () .
طرق الكشف الأخرى لها عيوبها الخاصة ولا يمكن أن تكون دقيقة بنسبة 100 ٪. ولكن كوسيلة للتفكير ، يمكن تعلمها منه. على سبيل المثال ، الاعتماد على حقيقة أن الصفيف هو الكائن الوحيد الذي يحتوي على طريقة الفرز:
دالة isarray (arr) {return typeof arr.sort === "function" ؛}إذا تم تعريف طريقة الفرز أيضًا لكائن مخصص ، فستكون الطريقة غير صالحة.
خامسا السمات
اكتشف ما إذا كان ينبغي استخدام الخاصية في كائن المثيل. إذا كنت لا تهتم بما إذا كانت السمة في كائن مثيل أو في كائن النموذج الأولي ، يمكنك ببساطة استخدامها في
على سبيل المثال ، اكتشف خصائص الكائن الحرفي:
var person = {name: "jack" ، العمر: 33} ؛ if ("name" in person) {...} //trueif(person.hasownproperty("name ")) {...} // trueعلى سبيل المثال خصائص كائن مثيل:
var person = function (الاسم ، العمر) {this.name = name ؛ هذا. { … }//خطأ شنيعالطرق الأخرى ليست جيدة:
إذا (الكائن [propname]) // ليس جيدًا ، كيف تعرف أن قيمة الخاصية ليست 0 أو 1؟ إذا (الكائن [propname] === NULL) // ليس جيدًا ، كيف تعرف أن قيمة الخاصية ليست فارغة؟ إذا (الكائن [propname] === غير محدد) // ليس جيدًا ، كيف تعرف أن قيمة الخاصية غير محددة؟
لخص
استخدم typeof للكشف عن السلسلة ، والرقم ، والطلاء ، وغير محدد ، وظيفة
اكتشاف فارغ مع ===
اكتشف صفيف مع isarray ()
استخدم extoryof للكشف عن الكائنات المدمجة (باستثناء الوظيفة والمصفوفة) والكائنات المخصصة
استخدم hasownproperty لاكتشاف ما إذا كانت الخاصية في كائن المثيل. إذا كنت لا تهتم بما إذا كانت السمة في كائن مثيل أو في كائن النموذج الأولي ، يمكنك ببساطة استخدامها في
حسنًا ، هذا كله بالنسبة لهذا المقال حول كيفية اكتشاف أنواع مختلفة من JavaScript. آمل أن يتمكن الجميع من دراسة محتوى هذه المقالة بعناية ، والتي قد تكون مفيدة للجميع لتعلم JavaScript.