Ü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

Der Unterschied und die Verwendung von Datum/Uhrzeit und Zeitstempel in MySQL

1. Wie wird die aktuelle Uhrzeit in MySQL dargest...

CentOS8-Installationstutorial für JDK8/Java8 (empfohlen)

Vorwort Zuerst wollte ich es mit wget auf CentOS8...

Eine kurze Diskussion über reguläre JS-RegExp-Objekte

Inhaltsverzeichnis 1. RegExp-Objekt 2. Grammatik ...

Das Lazy-Loading-Attributmuster in JavaScript verstehen

Traditionell erstellen Entwickler Eigenschaften i...

Hast du genau verstanden Schlagworte Definition Verwendung

Vorwort : Heute wurde ich gefragt: „Haben Sie das ...

Implementieren von Rechnerfunktionen mit dem WeChat-Applet

Dieser Artikel ist ein einfacher Rechner, der mit...

Welche Regeln gelten für den Kontext in JavaScript-Funktionen?

Inhaltsverzeichnis 1. Regel 1: Objekt.Methode() 1...

Konvertieren von XHTML-CSS-Seiten in Druckerseiten

<br />In der Vergangenheit musste zum Erstel...

Natives JS zum Erzielen eines nahtlosen Karusselleffekts

Native js realisiert den Karusselleffekt (nahtlos...

JavaScript-Closures erklärt

Inhaltsverzeichnis 1. Was ist ein Abschluss? 2. D...

Diskussion zum Problem verstümmelter Zeichen in Iframe-Seitenparametern

Ich bin auf ein sehr ungewöhnliches Problem mit ve...