Javascript-Map-Array mit 'fromCharCode' (Zeichenlänge)

8

Das Folgende stammt aus einer interaktiven Sitzung in der Chrome-Konsole:

%Vor%

Kann jemand erklären, warum die letzte Operation 3 zurückgibt?

    
David Wallis 06.04.2011, 13:13
quelle

3 Antworten

16

Sehr interessante Frage.

Und die Antwort ist: Der Grund, warum Sie 3 am Ende bekommen, ist, dass fromCharCode eine Zeichenkette mit so viele Zeichen zurückgibt, wie es Argumente im Aufruf gibt, und map ruft die Callback-Funktion mit drei Argumenten auf: Der Wert des Elements, der Index des Elements und das Objekt, das durchlaufen wird. Also eine Zeichenfolge mit drei Zeichen, aber nicht drei sofort angezeigten Zeichen. Tricky.

Genauer gesagt erhalten wir "C" für das erste Argument; Zeichen 0 für das zweite Argument (da wir [0] betrachten; es wäre 1 für [1] usw.) und ein Zeichen, das darauf basiert, das Array in eine Zahl zu zwingen (mit den Regeln, für die fromCharCode verwendet) das; Šime Vidas sagt unten, dass es ToUInt16 darauf geben wird, was in 0 ) resultiert.

Also zum Beispiel:

%Vor%

... wie beim Aufruf von map .

Aus Gründen der Klarheit:

%Vor%

Wenn wir sicherstellen, dass wir nur das eine Argument zu einem Zeitpunkt übergeben, sehen wir diesen unerwarteten Effekt nicht, also liefert uns die Verwendung direkt ein Ergebnis, das die meisten von uns nicht erwarten würden:

%Vor%

... das gibt uns ein leichter verständliches Ergebnis:

%Vor%     
T.J. Crowder 06.04.2011, 13:31
quelle
4

Ich kann nicht viel auf T.J. Crowder's große Antwort, aber ich kann eine Abhilfe für dieses spezielle Problem bieten.

Statt

%Vor%

Verwenden Sie

%Vor%

Abgesehen von dem Vorteil, das erwartete Ergebnis zurückzugeben, funktioniert dies auch, ohne auf die Methode ECMAScript 5th Edition, Array.prototype.map , angewiesen zu sein, wodurch es kompatibler wird.

    
Andy E 06.04.2011 15:16
quelle
0

Ran in das gleiche Problem und fand diesen Thread. Wenn Sie in ES6 sind, schlage ich diese Lösung vor:

%Vor%     
ahskaus 20.04.2016 22:16
quelle

Tags und Links