JavaScript einfügen und eine verschleierte Fassung kopieren, die dasselbe Ergebnis liefert: lokale Namen umbenannt, Strings hex-escaped, Zugriffe in Klammern, Kommentare entfernt.
Läuft lokal in deinem BrowserJavaScript einfügen, und das Werkzeug gibt dasselbe Programm zurück: lokale Namen umbenannt, Zeichenketten als \xNN- und \uNNNN-Escapes, Punkt-Zugriffe in Klammernotation, Kommentare entfernt. Der Code läuft weiter mit demselben Ergebnis; verarbeitet wird alles in diesem Tab, hochgeladen wird nichts.
Das ist Verschleierung gegen beiläufiges Lesen, keine Verschlüsselung. Die Logik bleibt enthalten; verlassen Sie sich also nicht darauf, API-Schlüssel oder Geschäftsregeln zu verstecken, und behalten Sie das lesbare Original — die Ausgabe von Hand zu debuggen ist mühsam.
Kommentare werden entfernt, Zeilenumbrüche bleiben stehen — eine gelöschte //-Notiz kann also nie die nächste Zeile verschlucken. Innerhalb des Schnipsels deklarierte Bezeichner — Variablen, Funktionen, Parameter, Klassen, catch-Bindungen — werden über die Scope-Kette in kurze generierte Namen umbenannt; Namen von außen, auch Globals, bleiben unverändert.
Zeichenketten werden Zeichen für Zeichen als \xNN- oder \uNNNN-Escapes neu geschrieben; eine "use strict"-Direktive bleibt unangetastet. Punkt-Zugriffe werden zu Klammerzugriffen: console.log wird zu console["\x6c\x6f\x67"], optionales Verketten folgt derselben Regel (a?.b wird a?.["b"]). Nach new und import bleibt die Syntax stehen, #private Felder werden nicht berührt.
Weder Verschlüsselung noch Minifizierung: Verschleierte Strings werden länger, nicht kürzer, und ein entschlossener Leser kann der Logik weiter folgen. Es geht darum, beiläufiges Kopieren zu erschweren, nicht Rekonstruktion unmöglich zu machen.
Ein einzelner Durchlauf über den Code, kein Bundler: Importe werden nicht aufgelöst, moderne Syntax wird nicht transpiliert, am Ladevorgang ändert sich nichts. Dasselbe Skript zweimal eingefügt ergibt unterschiedliche Ausgaben, weil die generierten Namen vom Inhalt abhängen — gut zum Verteilen, unbrauchbar zum Vergleichen von Builds.
Die Ausgabe ist darauf getestet, dieselben Werte wie die Eingabe zurückzugeben: Klassen, Arrow-Funktionen, Template-Literale mit verschachtelten ${}-Ausdrücken, async/await, Spread, optionales Verketten, Nullish Coalescing und Regex-Literale laufen durch. Modulcode behält seine import- und export-Namen und lädt weiterhin als Modul.
Skripte mit eval oder with werden nicht umbenannt — das Umbenennen auszulassen ist dort die einzig sichere Wahl —, Escaping und Klammerumwandlung gelten trotzdem. Eine Datei mit rund 80 KB läuft in wenigen Zehnmillisekunden; ein bereits verschleiertes Skript kann erneut verschleiert werden.