In (mindestens) Firefox Web Console und JSBin bekomme ich
%Vor% Node.js gibt "[object Object]"
in beiden Fällen zurück. Welches Verhalten entspricht der Spezifikation? Wenn der erste, warum?
Wenn in der Browser-Konsole kein =
(oder ein anderer Code, der seinen Kontext ändert) vorangestellt wird, wird {}
als Block behandelt, kein Objektliteral .
Da der Block leer ist, tut er nichts und bleibt + []
.
Der unäre Plusoperator konvertiert das Array in eine Zahl, die 0
ist.
Wenn ein Operator für Objekte verwendet wird, sollte der Javascript-Interpreter die Werte mit der Methode valueOf in primitives Format umwandeln, die tatsächlich den internen ToPrimitive-Funktionstyp verwendet, der auf die interne Methode [[DefaultValue]] des Objekts verweist.
Ihr Beispiel mit dem Plus-Operator ist etwas knifflig, weil der Operator sowohl als mathematische Addition als auch als String-Verkettung fungieren kann. In diesem Fall verkettet es Stringdarstellungen der Objekte.
Was wirklich hinter der Szene passiert, ist:
%Vor%Da das Array leer ist, gibt die toString-Methode eine leere Zeichenfolge zurück. Deshalb sollte das korrekte Ergebnis [object Object] sein, also der Rückgabewert von object.valueOf () toString ().
Tags und Links javascript