Warum sind numerische Oktal-Literale im strikten Modus nicht erlaubt (und was ist die Problemumgehung?)

8

Warum sind numerische Oktal-Literale im strengen JavaScript-Modus nicht zulässig? Was ist der Schaden?

%Vor% %Vor%

Falls ein Entwickler Octals benötigt (was fälschlicherweise ein Zahlen Bedeutung ), gibt es eine Problemumgehung?

    
student 18.12.2015, 14:55
quelle

4 Antworten

8

Der "warum" Teil der Frage ist nicht wirklich verantwortlich.

Wie für "wie", von der Spitze meines Kopfes ...

%Vor%
    
Amit 18.12.2015, 14:58
quelle
5
  

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.

    
gsnedders 18.12.2015 15:06
quelle
5

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:

%Vor%

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":

%Vor%

%Vor%
    
Patrick Roberts 18.12.2015 15:14
quelle
2

Heutzutage, mit großer Browserunterstützung für ES6, könnten Sie folgendes schreiben:

%Vor%     
Willian Balmant 20.12.2017 01:19
quelle