Wenn ich 019 > 020die JavaScript-Konsole eingebe (sowohl in Chrome als auch in Firefox getestet), erhalte ich die Antwort true.
Dies ist darauf zurückzuführen, 020dass es als OctalIntegerLiteral(gleich 16) 019interpretiert wird, während es anscheinend als DecimalLiteral(und gleich 19) interpretiert wird . Da 19ist größer als 16, 019 > 020ist true.
Was mich verwundert ist, warum 019wird als DecimalLiteralan erster Stelle interpretiert . Um welche Produktion handelt es sich? DecimalIntegerLiteralerlaubt nicht 019:
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits_opt
OctalIntegerLiteralerlaubt auch nicht 019(da 9es sich nicht um eine Oktalstelle handelt):
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
OctalDigit :: one of
0 1 2 3 4 5 6 7
Von dem, was ich in der Spezifikation sehe, 019sollte eigentlich abgelehnt werden, ich verstehe nicht, warum es als Dezimalzahl interpretiert wird.
Ich denke, hier gibt es eine Art Kompatibilitätsregel, aber ich habe keine formale Definition gefunden. Könnte mir bitte jemand dabei helfen?
(Warum ich das brauche: Ich entwickle einen JavaScript / ECMAScript-Parser für Java mit JavaCC und muss besonders auf die Spezifikation und deren Abweichungen achten.)
019 + 0 == 19und020 + 0 == 17so ignoriert es die führende Null, wenn sie nicht oktale Ziffern enthält.