Detaillierte Erläuterung der Datentypprobleme bei der JS-Array-Indexerkennung

Detaillierte Erläuterung der Datentypprobleme bei der JS-Array-Indexerkennung

Als ich ein WeChat-Applet-Projekt schrieb, gab es darin eine Funktion zur „Städteauswahl“. Der Autor verwendete die Komponente <picker-view> . Diese Komponente ist besonders, weil ihr value im Array -Format angegeben ist. Zum Beispiel: value="[1]" .

Da ich die Konvertierung des JS-Variablentyps damals nicht verstand, schrieb ich einige Urteilszeilen in den Code: (Dies ist streng)

let val_one=Typ von this.data.pIndex=="Nummer"?[this.daya.pIndex]:this.data.pIndex

(: Die Zugriffselemente im Projekt sind dynamisch!

Der Grund hierfür ist, dass der Index der Auswahl des Benutzers dynamisch folgen und zur Anzeige an value in wxml zurückgegeben werden soll.

Aber vorher müssen wir eine Entscheidung treffen – da es sich bei einigen Gebieten um Provinzstädte oder -gemeinden handelt, müssen wir Benutzer vor „dummen Aktionen“ wie plötzlichem Anfahren oder Abfahren schützen. Zu diesem Zeitpunkt meldet das WeChat-Applet einen Fehler, dass die entsprechenden Daten nicht gefunden werden können:

let Länge = placeArray[val_one].sub.length
wenn(Wert[0]>=Länge){
 val=[Länge-1]
}sonst wenn(Wert[0]<0){
 Wert=[0]
}

Als ich später zurückging, um den Code für dieses Projekt zu optimieren, stellte ich fest, dass dies (das Konvertieren von Arrays in Zahlen beim Erzwingen und das Konvertieren von Zahlen in Arrays beim Geben von Feedback) eigentlich unnötig war:

Detail

JavaScript scheint eine eigene "einzigartige" Methode zur Datenverarbeitung zu haben, aber der Autor hat noch keine relevanten Informationen gefunden ~~

So ermitteln Sie, ob ein Wert als Array-Index verwendet werden kann

Eines ist jedoch sicher: Die Zuweisung von Werten zu ganzzahligen Eigenschaftsschlüsseln ist ein Sonderfall von Arrays, da sie anders behandelt werden als nicht ganzzahlige Schlüssel. Um festzustellen, ob eine Eigenschaft als Array-Index verwendet werden kann, hat der Autor eine Passage im ES6-Spezifikationsdokument gefunden:

Derzeit ist ein String-Eigenschaftsname P nur dann ein Array-Index, wenn ToString(ToUint32(P)) gleich P und ToUint32(P) ungleich 2^32-1 ist.

Dieser Vorgang kann mit JS wie folgt implementiert werden:

Funktion toUint32(Wert){
	returniere Math.floor(Math.abs(Zahl(Wert))) % Math.pow(2,32);
}
Funktion isArrayIndex(Schlüssel){
	let numericKey = toUint32(Schlüssel);
	return String(numerischerSchlüssel) == Schlüssel && numerischerSchlüssel < (Math.pow(2,32)-1);
}

Die Funktion toUint32() konvertiert den angegebenen Wert mithilfe des in der Spezifikation beschriebenen Algorithmus in eine vorzeichenlose 32-Bit-Ganzzahl. isArrayIndex() konvertiert den Schlüssel zuerst in eine uint32-Struktur und führt dann zwei Vergleiche durch (überprüft nach toString() , ob er nicht gleich der ursprünglichen Zahl ist und ob er kleiner als 2^32-1 ist).

Mit dieser Grundlage können wir das Verhalten von new Array() einfach darauf aufbauend nachahmen - das Wichtigste ist die Beschreibung der Länge:

Arraylänge

Funktion createArray(Länge=0){
	gib einen neuen Proxy zurück ({Länge},{
		setze(TrapZiel,Schlüssel,Wert){
			let currentLength=Reflect.get(trapTarget,"Länge");
			wenn(istArrayIndex(Schlüssel)){
				let numericKey = Nummer(Schlüssel);
				wenn(numerischerSchlüssel >= aktuelleLänge){
					Reflect.set(trapTarget,"Länge",numerischerSchlüssel+1);
				}
			}sonst wenn(Schlüssel === "Länge"){
				wenn(Wert < aktuelleLänge){
					für(let index=currentLength-1;index>=value;index--){
						Reflect.deleteProperty(trapTarget,index);
					}
				}
			}
			// Unabhängig vom Typ des Schlüssels muss dieser Code ausgeführt werden return Reflect.set(trapTarget,key,value);
		}
	});
}

Experimentieren Sie damit:

meinArray_test

Zusammenfassen

Dies ist das Ende dieses Artikels mit der detaillierten Erklärung von Datentypproblemen bei der JS-Array-Indexerkennung. Weitere Informationen zu Datentypen bei der JS-Array-Indexerkennung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Beispiel-Tutorial zur JavaScript-Typerkennungsmethode
  • Detaillierte Erklärung der Datentypen in JavaScript und wie man Datentypen erkennt
  • Detaillierte Erläuterung der Datentyperkennungsmethoden in Javascript
  • Zusammenfassung der JS-Datentyperkennung
  • js-Lernzusammenfassung_Vier Methoden basierend auf Datentyperkennung (unbedingt lesen)
  • Zusammenfassung der JS-Methoden zum Erkennen von Array-Typen
  • Zusammenfassung verschiedener Möglichkeiten zum Erkennen von Datentypen in Javascript
  • Zusammenfassung der grundlegenden JavaScript-Datentypen und gängigen Methoden zur Typerkennung
  • Zusammenfassung verschiedener Möglichkeiten zum Erkennen von Datentypen in JS und ihrer Vor- und Nachteile
  • JS-Regular-Expression-Matching-Erkennung verschiedener numerischer Typen (digitale Überprüfung)
  • So erkennen Sie verschiedene JavaScript-Typen
  • JavaScript-Typerkennung: Defekte und Optimierung von typeof und instanceof
  • JavaScript-Lernhinweise: Erkennen des Clienttyps (Engine, Browser, Plattform, Betriebssystem, Mobilgerät)
  • Javascript implementiert die Erkennung des Clienttyp-Codepakets
  • JavaScript-Methode zum Erkennen des Dateityps

<<:  Zusammenfassung von 11 erstaunlichen Best Practices für die Refaktorierung von JavaScript-Code

>>:  So verwenden Sie die Lotteriekomponente des WeChat Mini-Programms

Artikel empfehlen

So fügen Sie Codebeispiele für die Vim-Implementierung in Power Shell hinzu

1. Gehen Sie zur offiziellen Website von Vim, um ...

MySQL-Startfehler InnoDB: Sperren nicht möglich/ibdata1-Fehler

Beim Starten von MySQL in einer OS X-Umgebung wir...

Beheben Sie den Fehler bei der Installation von VMware Tools unter Ubuntu 18.04

1. Laut dem Online-Tutorial schlägt die Installat...

Detaillierte Erklärung der Schleifenverwendung in Javascript-Beispielen

Aus Langeweile habe ich ein paar einfache Übungen...

4 Scan-Tools für den Linux-Desktop

Obwohl die papierlose Welt noch nicht angebrochen...

Vue implementiert ein Suchfeld mit einer Lupe

In diesem Artikel erfahren Sie, wie Sie mit Vue e...

So unterstützen Sie vollständiges Unicode in MySQL/MariaDB

Inhaltsverzeichnis Einführung in utf8mb4 Fehler b...

W3C Tutorial (13): W3C WSDL Aktivitäten

Bei Webdiensten geht es um die Kommunikation zwis...

Mehrere Grundsätze für die Produktdesign-Referenz auf Websites

In der folgenden Analyse geht es um Produktdesign...

Detaillierte Erläuterung des Lazy Loading und Preloading von Webpack

Inhaltsverzeichnis Normale Belastung Lazy Loading...

Detaillierte Erklärung des Vue-Slots

1. Funktion : Ermöglicht der übergeordneten Kompo...