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

Mycli ist ein unverzichtbares Tool für MySQL-Befehlszeilen-Enthusiasten

mycli MyCLI ist eine Befehlszeilenschnittstelle f...

So ändern Sie die CentOS-Serverzeit auf die Peking-Zeit

1. Ich habe ein VPS- und CentOS-System gekauft un...

HTML-Grundlagen - Pflichtlektüre - Umfassendes Verständnis von CSS-Stylesheets

CSS (Cascading Style Sheet) wird zum Verschönern ...

Detaillierte Erklärung des DOM DIFF-Algorithmus in der React-Anwendung

Inhaltsverzeichnis Vorwort Was ist VirtualDOM? Gr...

Eine kurze Erklärung zum sinnvollen Einsatz von Tabellen und Divs im Seitendesign

Zu Beginn dieses Artikels möchte ich die Fehler in...

Verwendung von „align-content“ im Zeilenumbruchbereich des Flex-Layouts

1. Das in diesem Artikel implementierte Effektdia...

JS Cross-Domain-Lösung React-Konfiguration Reverse-Proxy

Domänenübergreifende Lösungen jsonp (get simulier...

Konfiguration der primären Netzwerk-Portzuordnung für Docker

Portzuordnung Wenn vor dem Start des Docker-Conta...

Lösung für das Problem des MySQL-Threads beim Öffnen von Tabellen

Problembeschreibung Vor kurzem gab es einen MySQL...

MySQL-Fallanalyse der Transaktionsisolationsebene

Inhaltsverzeichnis 1. Theorie SERIALISIERBAR WIED...

CSS3 zum Erreichen eines Menü-Hover-Effekts

Ergebnis: html <nav id="nav-1"> &...