1. Führen Sie zuerst die 5 Originaltypen ein
5 Primitive Typen in JavaScript sind String , Nummer , boolean , undefiniert , null
var name = "jack"; var age = 32; var Single = false; var App; //undefinedConsole.log(Typeof Name); //stringconsole.log(Typeof Age); //numberconsole.log(Typeof Single); //booleanconsole.log(Typeof App); //undefinedConsole.log(Typeof null); //Objekt
Es wurde festgestellt, dass die anderen vier Grundtypen mit Ausnahme von Null durch Typeof identifiziert werden können:
if (typeof name === "String") {name += "zhang"; } if (typeof alter === "number") {alter ++; } if (typeof Single === "boolean" && Single) {…} if (typeof app === "undefined") {app = {}; }Da typeof null ein Objekt erhält, verwenden Sie NULL direkt: direkt:
if (el === null) {…}2. Objekt
JavaScript-Objekte enthalten integrierte Objekte ( Datum, Regexp, Fehler usw.) und benutzerdefinierte Objekte .
(Beachten Sie, dass Funktion und Array zwar auch integrierte Objekte sind, sie jedoch im nächsten Abschnitt getrennt erörtert werden.)
Objekte können nicht unter Verwendung von TypeOF -ähnlichen Basistypen erkannt werden, da die erkannten Ergebnisse alle Objekte sind:
console.log (typeof New Date ()); //objectconsole.log(Typeof New Regexp ()); //ObjectConsole.log(Typeof neuer Fehler ()); //objectconsole.log(Typeof New Person ()); //objectconsole.log(Typeof New Person ()); // Verwenden Sie typeof, um festzustellen, dass das benutzerdefinierte Objekt auch Objekt ist
Um Instanz zu verwenden, um stattdessen zu erkennen:
var date = new Date (); var reg = new regexp (); var err = neuer error (); var me = new Person (); if (Datum des Datums von Datum) {// Erkennungsdatum Jahr = Datum.GetingingRear (); } if (reginstance von regexp) {// Erkennung regulärer Expression Reg.test (...); } if (ErrinstanceOF -Fehler) {// Erkennungsausnahme -Wurf Err; } if (me Instance von Person) {// Erkennung benutzerdefinierter Objekt ...} Es gibt jedoch ein Problem mit benutzerdefinierten Objekten, vorausgesetzt, diese Person ist sowohl in Framea als auch in Frameb des Browsers definiert. Das ME -Objekt ist in Framea definiert und wird mit me instanceof Person als wahr erkannt. Wenn das benutzerdefinierte Objekt, das ich an das Framb übergeben wird, ist Instanz in FrameB falsch.
Wie zu Beginn dieses Abschnitts erwähnt, sind es jedoch auch Funktionen und Array integriert, aber sie bleiben dem nächsten Abschnitt überlassen. Der Grund dafür ist, dass Funktion und Array auch die gleichen Probleme wie benutzerdefinierte Objekte haben. Daher verwenden Funktion und Array im Allgemeinen keine Instanz nicht
3. Funktion
In dem obigen sagte, dass die Verwendung von Instanz -Erkennungsfunktion keine Rahmen überschreiten kann. Daher wird Typof verwendet, um nachzuweisen, was kreuzweise sein kann:
var func = function () {}; if (typeof func === 'function') {…}IE8 verwendete jedoch Typeof, um DOM -Funktionen zu erkennen und ein Objekt zu erhalten, sodass IE8 in:
console.log (typeof document.getElementById); // Objekt, nicht functionConsole.log (typeof document.getElementsByTagName); // Objekt, nicht functionConsole.log (typeof document.createelement); // Objekt, nicht Funktion // IE -Browser vor IE8, verwenden Sie, um festzustellen, ob die DOM -Funktion unterstützt wird, wenn ("GetElementById" in Dokument) {…} if ("getElementsByTagname" in Dokument) {…} if ("getElementsByTagname" in Dokument) {} if ("createLement) {{}4. Array
In dem obigen sagte, dass die Verwendung von Instanz, um festzustellen, dass das Array keine Frames überschreiten kann. Vor ES5 haben wir maßgeschneiderte Erkennungsmethoden. Die genaueste Methode: ToString, das vom Array abhängt, gibt die feste Zeichenfolge zurück. "[Objektarray]", um festzustellen :
Funktion isArray (arr) {return object.prototype.toString.call (arr) === "[Objektarray]";}Diese Methode ist präzise und elegant und wurde also von vielen Bibliotheken übernommen. Schließlich wurde Array als Isarray -Methode in ES5 vorgestellt, wobei sich auf MDN bezieht. Jetzt müssen Sie die Erkennungsmethode nicht anpassen und einfach isarray () verwenden.
Andere Erkennungsmethoden haben ihre eigenen Defekte und können nicht 100% genau sein. Aber als Denkweise kann es daraus gelernt werden. Zum Beispiel wird es festgestellt, dass Array das einzige Objekt ist, das die Sortiermethode enthält:
Funktion isArray (arr) {return typeof arr.sort === "Funktion";}Wenn die Sortiermethode auch für ein benutzerdefiniertes Objekt definiert ist, ist die Methode ungültig.
V. Attribute
Erkennen Sie, ob die Eigenschaft im Instanzobjekt verwendet werden sollte. Wenn es Ihnen egal ist, ob sich das Attribut in einem Instanzobjekt oder in einem Prototypobjekt befindet, können Sie einfach in verwenden
Beispielsweise erkennen Sie wörtliche Objekteigenschaften:
var Person = {Name: "Jack", Alter: 33}; if ("name" persönlich) {…} //trueif(person.hasownProperty("name ")) {…} // trueZum Beispiel Instanzobjekteigenschaften:
var Person = Funktion (Name, Alter) {this.name = name; this.age = Age;}; Person.Prototype.location = "shanghai"; var me = new Person ("Jack", 33) if ("Name" in mir) {…} //trueif(me.hasownproperty("name { … }//FALSCHAndere Methoden sind nicht gut:
Wenn (Objekt [PropName]) // Nicht gut, woher wissen Sie, dass der Eigenschaftswert nicht 0 oder 1 ist? Wenn (Objekt [PropName] === NULL) // Nicht gut, woher wissen Sie, dass der Eigenschaftswert nicht null ist? Wenn (Objekt [PropName] === undefiniert) // Nicht gut, woher wissen Sie, dass der Eigenschaftswert nicht undefiniert ist?
Zusammenfassen
Verwenden Sie Typeof, um Zeichenfolge, Nummer, boolean, undefiniert, Funktion zu erkennen
Null erkennen mit ===
Array mit isarray () erkennen
Verwenden Sie InstanceOF, um integrierte Objekte (außer Funktion und Array) und benutzerdefinierten Objekten zu erkennen
Verwenden Sie HasownProperty, um festzustellen, ob sich die Eigenschaft im Instanzobjekt befindet. Wenn es Ihnen egal ist, ob sich das Attribut in einem Instanzobjekt oder in einem Prototypobjekt befindet, können Sie einfach in verwenden
Okay, das ist alles für diesen Artikel darüber, wie verschiedene Arten von JavaScript erfasst werden. Ich hoffe, jeder kann den Inhalt dieses Artikels sorgfältig studieren, was für alle hilfreich sein kann, JavaScript zu lernen.