Warum sind numerische Oktal-Literale im strengen JavaScript-Modus nicht zulässig? Was ist der Schaden?
Falls ein Entwickler Octals benötigt (was fälschlicherweise ein Zahlen Bedeutung ), gibt es eine Problemumgehung?
Warum sind numerische Oktal-Literale im strengen JavaScript-Modus nicht zulässig? Was ist der Schaden?
Oktale in JS waren in der Vergangenheit eine nicht standardmäßige Erweiterung des Standards (in ES5, die den strikten Modus einführt, befinden sie sich in Anhang B, einer Sammlung von Nicht-Standard-Features, die die meisten Implementierungen unterstützen Oktals in einer Weise, die mit den Anforderungen der Websites nicht kompatibel ist), und der strikte Modus hat versucht, alle nicht standardmäßigen Erweiterungen zu verbieten. Das "Warum", warum sie niemals standardisiert wurden, ist eine naheliegende Frage, die mir nicht bewusst ist.
Wenn ein Entwickler Octals verwenden muss (was die Bedeutung einer Zahl irrtümlich ändern kann), gibt es dann eine Arbeit?
Als @Amit antwortete, parseInt
mit seinem zweiten Argument als 8 funktioniert immer noch im strikten Modus.
Oktal-Literale sind nicht erlaubt, da es ihnen nicht erlaubt ist, Programmierer davon abzuhalten, führende Nullen als Füllung in einem Skript zu verwenden. Betrachten Sie zum Beispiel das folgende Snippet:
Scheint harmlos genug, oder? Wir Programmierer mit OCD möchten nur alle Kommas zusammenbringen, damit es schöner aussieht. Aber hier ist das Problem:
%Vor% Dies ist die Ausgabe. Sehen Sie, wie inkonsequent es wird? Nicht alle Null-aufgefüllten numerischen Literale werden in Oktal konvertiert, da 8 und 9 keine Oktal-Ziffern sind. Es ist schwieriger, sie konsistent zu halten, wenn man sich an all diese Regeln erinnern muss, also macht strict mode
es einfacher, indem man sie ganz verbietet.
Stattdessen sollten Sie mit führenden Leerzeichen auffüllen, oder wenn Sie oktal verwenden möchten, dann verwenden Sie parseInt()
mit dem optionalen radix
Argument von 8
, um oktal anzugeben.
Hier sind die zwei "Lösungen":
Heutzutage, mit großer Browserunterstützung für ES6, könnten Sie folgendes schreiben:
%Vor%Tags und Links javascript ecmascript-5 octal strict-mode