Über den Unterschied zwischen js typeof und instanceof bei der Beurteilung von Datentypen und deren Entwicklung und Verwendung

Über den Unterschied zwischen js typeof und instanceof bei der Beurteilung von Datentypen und deren Entwicklung und Verwendung

Vorwort:

Bei der täglichen Entwicklung stoßen wir häufig auf Situationen, in denen wir den Datentyp einer Variablen bestimmen müssen oder ob die Variable null ist. Wie wählen Sie den Operator aus, um den Typ zu bestimmen? Dieser Artikel fasst die Wissenspunkte zu typeof und instanceof zusammen, die unsere Entwickler beherrschen müssen, und gibt Vorschläge für deren Verwendung bei der Entwicklung. Gleichzeitig treten solche Probleme bei Interviews häufig auf.

1. Typ des Operators

typeof bestimmt den Datentyp einer beliebigen Variable. Genauer gesagt ist dies die beste Methode, um zu bestimmen, ob eine Variable ein String, eine Zahl, ein Boolescher Wert oder undefiniert ist. Sein Rückgabewert ist ein String-Typ und seine Verwendung ist wie folgt: typeof ist ein Operator, keine Funktion, aber er kann verwendet werden, um Variablen als Parameter zu übergeben:
a、typeof operand
b、typeof (operand)

(1) Der Rückgabewert ist vom Typ String, wobei:

Rückgabewert

Bedeutungswert

"undefiniert"

Undefiniert

"Boolesch"

Boolescher Wert

"Schnur"

Zeichenfolge

"Nummer"

Numerisch

"Objekt"

Ein Objekt (keine Funktion) oder null

"Funktion"

Funktion

"Symbol"

Symbol

(2) Gemeinsame Verwendungsmethoden

        console.log(Typ von nicht definiert); //'nicht definiert'
        console.log(Typ von true);//'bpplean'
        console.log(typeof ("Nummer")); //'Zeichenfolge'
        console.log(Typ von "Zahl"); //'Zeichenfolge' 
        console.log(Typ von 1);//'Nummer'
        console.log(Typ von Symbol());//'Symbol'
        //Für spezielle Objekte wie Array und Null gibt typeof immer ein Objekt zurück, was die Einschränkung von typeof darstellt console.log(typeof null); //'Objekt'
        console.log(Typ von [1, 2, 3]);//'Objekt'
        console.log(Typ von nicht definiert); //'nicht definiert'
        //Verwenden Sie den typeof-Operator, um Funktionen von anderen Objekten zu unterscheiden function f1() { console.log(111); }
        console.log(Typ von f1); //'Funktion'  
        console.log(Typ von f1()); // 111 'undefiniert'

(3) Sie können typeof nicht verwenden, um zu bestimmen, ob eine Variable existiert

        var a;
        wenn (a === undefiniert) {
            console.log("Variable existiert nicht")
        } anders {
            console.log("Variable existiert")
        }
     // Die Variable existiert nicht

2. Instanz des Operators

Während typeof für primitive Werte nützlich ist, ist es für Referenzwerte weniger nützlich. Normalerweise ist es uns egal, ob ein Wert ein Objekt ist, sondern um welchen Objekttyp es sich handelt. Um dieses Problem zu lösen, stellt ECMAScript den Operator instanceof bereit. Verwenden Sie es wie folgt:

        Funktion f1() { console.log(111);
        console.log(f1 Instanz von Objekt);//true
        console.log(f1 Instanz der Funktion);//true
        console.log(f1 Instanz von RegExp); //false


Alle Referenzwerte sind Instanzen von Object , daher gibt das Testen eines beliebigen Referenzwerts mit instanceof und Object true zurück.

  • Wenn Sie instanceof auf einen primitiven Wert anwenden, wird ebenfalls immer false zurückgegeben, da primitive Werte keine Objekte sind.

instanceof wird verwendet, um zu bestimmen, ob prototype Eigenschaft einer Konstruktorfunktion irgendwo in der Prototype-Kette eines Objekts vorkommt. Das Umsetzungsprinzip ist wie folgt:

  Funktion meineInstanzvon(links, rechts) {
    let proto = Object.getPrototypeOf(left), // Den Prototyp des Objekts abrufen prototype = right.prototype; // Das Prototypobjekt der Konstruktorfunktion abrufen // Bestimmen, ob sich das Prototypobjekt der Konstruktorfunktion in der Prototypkette des Objekts befindet while (true) {
      wenn (!proto) false zurückgibt;
      wenn (proto === Prototyp) true zurückgibt;
      proto = Objekt.getPrototypeOf(proto);
    }
 }

3. Der Unterschied zwischen typeof und instanceof und Vorschläge zur Verwendung in der Entwicklung

Sowohl typeof als auch instance sind Methoden zur Bestimmung von Datentypen. Die Unterschiede sind folgende:

  • typeof gibt den Basistyp einer Variablen zurück, instanceof gibt einen Booleschen Wert zurück
  • instanceof kann komplexe Referenzdatentypen genau bestimmen, grundlegende Datentypen jedoch nicht korrekt.
  • typeof hat auch seine Nachteile. Obwohl es den grundlegenden Datentyp (außer null ) bestimmen kann, kann es den Referenzdatentyp außer dem function nicht bestimmen.

Es ist ersichtlich, dass die beiden oben genannten Methoden Nachteile haben und nicht die Anforderungen aller Szenarien erfüllen können.

Wenn Sie Datentypen im Allgemeinen erkennen müssen, empfiehlt es sich, Object.prototype.toString zu verwenden und diese Methode aufzurufen, um einheitlich eine Zeichenfolge im Format “[object Xxx]” zurückzugeben. Verwenden Sie es wie folgt:

        console.log(Object.prototype.toString.call(undefined)) //"[Objekt undefiniert]"
        console.log(Object.prototype.toString.call(true)) // "[Objekt Boolean]"
        console.log(Object.prototype.toString.call('1')) // "[Objekt String]"
        console.log(Object.prototype.toString.call(1)) // "[Objektnummer]"
        console.log(Object.prototype.toString.call(Symbol())) // "[Objekt Symbol]"
        console.log(Object.prototype.toString.call({})) // "[Objekt Objekt]"
        console.log(Object.prototype.toString.call(function () { })) // "[Objektfunktion]"
        console.log(Object.prototype.toString.call([])) //"[Objekt-Array]"
        console.log(Object.prototype.toString.call(null)) //"[Objekt Null]"
        console.log(Object.prototype.toString.call(/123/g)) //"[Objekt RegExp]"
        console.log(Objekt.prototype.toString.call(neues Datum())) //"[Objekt Datum]"
 

Zusammenfassen:

Dies ist das Ende dieses Artikels über den Unterschied zwischen js typeof und instanceof bei der Beurteilung von Datentypen und deren Entwicklung und Verwendung. Weitere relevante Inhalte zu js typeof und instanceof finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der Javascript-Grundlagenschleife
  • So verwenden Sie async und await richtig in JS-Schleifen
  • Vier Methoden zur Datentypbeurteilung in JS
  • Ein Beispiel für das elegante Schreiben von Urteilen in JavaScript
  • So konvertieren Sie eine Zeichenfolge in JavaScript in eine Zahl
  • parseInt parseFloat js Zeichenfolge Konvertierung Nummer
  • Allgemeine JavaScript-Anweisungen: Schleife, Beurteilung, Zeichenfolge in Zahl

<<:  Lösung für das automatische Trennen der Verbindung von Navicat zur Datenbank nach einer gewissen Zeit

>>:  Lösung zum Importieren weiterer Daten aus MySQL in Hive

Artikel empfehlen

So erstellen Sie ein neues Image basierend auf einem vorhandenen Image in Docker

Das Erstellen neuer Images aus vorhandenen Images...

Sicherheitskonfigurationsstrategie für CentOS-Server

In letzter Zeit wurde der Server häufig mit Brute...

CocosCreator-Tutorial für den Einstieg: Erstellen Sie Ihr erstes Spiel mit TS

Inhaltsverzeichnis Prämisse TypeScript vs. JavaSc...

So implementieren Sie abgerundete Ecken mit CSS3 unter Verwendung von JS

Ich bin auf ein Beispiel gestoßen, als ich nach e...

Installationstutorial auf Unternehmensebene unter Verwendung des LAMP-Quellcodes

Inhaltsverzeichnis LAMP-Architektur 1.Lampeneinfü...

Detaillierte Analyse der Unterschiede zwischen break und last in Nginx

Lassen Sie uns zunächst über den Unterschied spre...

Problem mit der Kompilierung des Nginx RTMP-Moduls in der Arm-Version

Inhaltsverzeichnis 1. Vorbereitung: 2. Quellcode-...

So verwendet MySQL Transaktionen

Grundlagen Eine Transaktion ist eine atomare Oper...

Einige Kenntnisse über die absolute und relative Positionierung von Seitenelementen

Ab heute werde ich regelmäßig kleine Wissenspunkte...

Schritte zum Verpacken und Konfigurieren von SVG-Komponenten in Vue-Projekten

Ich bin erst vor Kurzem in eine neue Firma einges...

VMware12 installiert die Desktopversion von Ubuntu19.04 (Installations-Tutorial)

1. Versuchsbeschreibung Installieren Sie in der v...

Docker-Fallanalyse: Erstellen eines Redis-Dienstes

Inhaltsverzeichnis 1 Mount-Verzeichnisse und Date...

Lösung für den Fehler bei der Installation von Docker auf der CentOS-Version

1. Versionsinformationen # Katze /etc/system-rele...

Detaillierte Erklärung der Kernfunktionen und der Ereignisbehandlung von jQuery

Inhaltsverzeichnis Ereignis Seite wird geladen Ve...