Erwartet, wie Sie bereits betont haben, JSON.parse()eine Zeichenfolge und kein Array. Wenn jedoch ein Array oder ein anderer Wert ohne Zeichenfolge angegeben wird, erzwingt die Methode automatisch eine Zeichenfolge und fährt fort, anstatt sofort zu werfen. Aus der Spezifikation :
- Sei JText ToString (Text).
- ...
Die Zeichenfolgendarstellung eines Arrays besteht aus seinen durch Kommas getrennten Werten. Damit
String(['1234'])kehrt zurück '1234',
String(['1234as'])kehrt zurück '1234as'und
String(['123', '123'])kehrt zurück '123,123'.
Beachten Sie, dass Zeichenfolgenwerte nicht erneut in Anführungszeichen gesetzt werden. Dies bedeutet, dass ['1234']und [1234]beide in dieselbe Zeichenfolge konvertieren '1234'.
Was Sie also wirklich tun, ist:
JSON.parse('1234')
JSON.parse('1234as')
JSON.parse('123,123')
1234asund 123,123sind nicht gültig JSON, und so JSON.parse()wirft in beiden Fällen. (Ersteres ist zunächst keine legale JavaScript-Syntax, und letzteres enthält einen Kommaoperator, der nicht dazu gehört.)
1234Auf der anderen Seite ist ein Zahlenliteral und daher ein gültiger JSON, der sich selbst darstellt. Und deshalb JSON.parse('1234')(und im weiteren Sinne JSON.parse(['1234'])) wird der numerische Wert 1234 zurückgegeben.