Für JavaScript-Typen kann es einfach wie folgt zusammengefasst werden: Im Vergleich zu stark typisierten Sprachen handelt es sich um eine schwach typisierte (lose) typisierte Sprache. Der Unterschied zwischen ihnen besteht darin, dass es einen festen Raum gibt Im Stapelspeicher wird ein nicht festgelegter Speicherplatz im Heapspeicher und ein Zeiger auf den Implementierungsort im Stapelspeicher gespeichert.
Viele Bücher auf dem Markt bieten viel Platz, um darüber zu sprechen. In diesem Artikel werden mehrere Aspekte behandelt, die möglicherweise grundlegende Kenntnisse von JavaScript, insbesondere von JavaScript-Typen, erfordern. Wenn Sie es immer noch nicht verstehen, können Sie sich ein Buch über JavaScript besorgen und es lesen, bevor Sie diesen Artikel lesen.
1. Grundtypen und Referenztypen
1. Grundtypen: Undefiniert/Null/Boolesch/Zahl/String
2. Referenztypen: Objekt/Array/Funktion/Datum/RegExp/Fehler/Map/Set…
Warum wurden die Referenztypen nicht aufgezählt? Weil es für Sie ausreicht, so viel zu wissen, zumindest für diesen Artikel, über den ich spreche. Andere werden möglicherweise selten verwendet, und selbst Dinge wie Map und Set werden nicht von allen Browsern unterstützt.
2. Beurteilung des JavaScript-Typs
Es gibt zwei Operatoren in JavaScript, die zur Bestimmung von Typen verwendet werden können. Sie sind Typof und Instanzof, aber der Kreis ist sehr klein, sie passen nicht gut zusammen und sie sind bekanntermaßen unzuverlässig. In einigen Fällen ist es korrekt, in vielen Fällen jedoch unzuverlässig. Werfen Sie einfach einen Blick darauf und Sie werden es wissen:
// Wenn unzuverlässig:
typeof [] // object
typeof null // object
'sofish' instanceof String // false
Hmm~ Vielleicht werden viele JavaScript-Anfänger aus diesem Grund fluchen. Die meisten Leute haben bereits Bibliotheken wie jQuery, wenn sie JS verwenden müssen. Sie haben sie gekapselt, damit Sie Typen leicht erkennen können. Tatsächlich ist die Erkennung natürlich nicht schwierig, da das Sprichwort „In JavaScript ist alles ein Objekt“ natürlich, wie in vielen Dokumenten erwähnt, undefiniert eigentlich nur eine globale Eigenschaft wie NaN und Infinity ist. Das wissen Sie wahrscheinlich. Aber „Objekt“ kann uns helfen:
In diesem Fall können wir die Funktion is verwenden, um den Typ zu bestimmen. Diese einfache Funktion ist gut kompatibel und kann in Ihrem Projekt verwendet werden. Zum Beispiel:
3. JavaScript-Typkonvertierung
In JavaScript kann der Typ von Variablen (Eigenschaften) geändert werden. Am häufigsten kommt die Konvertierung zwischen String und Number vor. Wie verwandelt man aus 1 „2“ 12? Es ist notwendig, den Operator zu verstehen, bei dem es sich in JavaScript um einen mathematischen Operator und einen String-Bindestrich handelt. Daher werden Anfänger oft ein interessantes Phänomen beobachten. Bei der Verwendung des Zeichens ist die Berechnung manchmal nicht das, was sie wollen, aber die Verwendung des - Zeichens kann immer die „richtige“ Antwort erhalten.
err = 'sofish';
console.log(err); // 'sofish'
1. Eigenschaften und Methoden hinzufügen
Wir werden im folgenden Code sehen, dass, wenn wir einen grundsätzlich ähnlichen Wert zuweisen, kein Fehler gemeldet wird, dieser jedoch beim Abrufen ungültig ist:
var str = 'sofish';
str.hello = 'world';
console.log(str.hello); // undefiniert
2. Operationen an Referenztypwerten
Da der Referenztyp als Referenz im Stapelspeicher gespeichert ist und wir auf denselben ursprünglichen Wert verweisen, wirkt sich die Operation auf den Wert hier auf alle Referenzen aus (nicht auf die Operation des Werts). Direkte Manipulation) erstellt ein Objekt neu, ohne den ursprünglichen Wert zu ändern. Zum Beispiel:
//Nicht identischer Typ
sofish = ['not a fish'] // Wenn sofish auf ähnliche Weise geändert wird, wird der ursprüngliche Wert nicht geändert
console.log(arr);// [ 1, 2, 3, 'Hallo Welt']
3. Referenztypwerte kopieren
Operationen am ursprünglichen Wert wirken sich auf alle Referenzen aus, was nicht unbedingt das ist, was wir wollen. Manchmal müssen wir ein brandneues Objekt kopieren, ohne andere Referenzen während der Operation zu beeinflussen. Im Allgemeinen gibt es nur wenige spezifische Vorgänge wie Datum/Funktion/RegExp..., hauptsächlich Vorgänge wie das Hinzufügen von Elementen und Eigenschaften zu Array und Objekt. Das Wichtigste, was wir also verstehen müssen, ist, wie man Array- und Objektobjekte kopiert.
3.1 Arrays kopieren
Im Array-Objekt gibt es eine Slice-Methode, die ein abgefangenes Array zurückgibt. In ES5 geben Filter usw. auch ein neues Array zurück, sodass wir diese Methode zum Kopieren verwenden können.
// Der Betrieb des neuen Arrays hat keine Auswirkungen auf das ursprüngliche Array
sofish.push('hello world');
console.log(arr); // [1, 2, 3]
Wir verwenden die Slice-Methode, um Array zu kopieren. Tatsächlich können wir sowohl für Array als auch für Objekt die for ... in-Schleife verwenden, um zu kopierende Werte zu durchlaufen.
//Vorgänge an neuen Objekten haben keinen Einfluss auf den ursprünglichen Wert
sofish.say = function() {};
console.log(obj); // { name: 'sofish' }
3.3 Schatten / Tiefenkopie
Operationen wie die oben genannten werden oft als flache Kopie (Schattenkopie) bezeichnet. Allerdings können sowohl Array als auch Objekt mehrere Ebenen (Dimensionen) haben. Eine solche Kopie berücksichtigt nur den Wert der obersten Ebene. Array und Objekt verweisen immer noch auf das ursprüngliche Objekt. Zum Beispiel:
// Operationen auf dem in „sofish“ enthaltenen Objekt „cat“ wirken sich auf den ursprünglichen Wert aus
sofish[1].bio = 'hackable';
console.log(arr);// [1 , cat: { bio: 'hackable' } ]
// Der flache Kopiervorgang auf der ersten Ebene wirkt sich nicht auf den ursprünglichen Wert aus, sondern auf die zweite Ebene
sofish.push('cat'); 1, {bio: 'kein Fisch'}]
sofish[1].bio = 'hello world';
console.log(arr) // [1, {bio: 'hello world'}]
sofish = copy(arr, 1);
sofish[1].bio = 'foo or bar';
console.log(arr) ; // [1, {bio: 'hello world'}]