Ü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

Zwei Möglichkeiten zum Starten des Linux-Bootdienstes

Inhaltsverzeichnis rc.local-Methode chkconfig-Met...

Detaillierte Analyse der untergeordneten und übergeordneten Vue-Komponenten

Inhaltsverzeichnis 1. Übergeordnete Komponenten u...

So implementieren Sie ein Hover-Dropdown-Menü mit CSS

Wie üblich werde ich heute über einen sehr prakti...

jQuery implementiert das Bouncing-Ball-Spiel

In diesem Artikel wird der spezifische Code von j...

Kennen Sie die seltsamen Dinge in Javascript?

Unsere erfahrenen Vorgänger haben zahllose Codes ...

Vue.js implementiert Erläuterungen zum Tab-Umschalten und Farbwechseln

Bei der Implementierung dieser Funktion konnte di...

Datagrip2020 kann MySQL-Treiber nicht herunterladen

Wenn Sie es nicht durch direktes Klicken auf „Dow...

Vue implementiert ein Beispiel für eine verschachtelte Routing-Methode

1. Verschachteltes Routing wird auch als Sub-Rout...

Grafisches Tutorial zur Installation und Konfiguration von mysql5.7.20 (Mac)

Grafisches Tutorial zur Installation und Konfigur...

Über 3 gängige Pakete der REM-Anpassung

Vorwort Ich habe bereits einen Artikel über REM-A...