Das Folgende stammt aus einer interaktiven Sitzung in der Chrome-Konsole:
%Vor% Kann jemand erklären, warum die letzte Operation 3
zurückgibt?
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%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.
Tags und Links javascript