Im Rahmen einer Bibliothek, die ich schreibe, ich mag den Benutzer lassen, passiert Funktionen wie Objektschlüssel:Wie sicher ist es, beim Erstellen eines Objekts anzunehmen, dass Nicht-String-Schlüssel mit toString() in Strings konvertiert werden?
https://github.com/welldone-software/redux-toolbelt/tree/master/packages/redux-toolbelt#makereducer
Zum Beispiel im Folgenden ist increaseBy
eine Funktion mit einem benutzerdefinierten toString()
, die einem zurückgibt Zeichenfolge und decreaseBy.TYPE
ist eine Zeichenfolge.
const reducer = makeReducer({
[increaseBy]: (state, {payload}) => state + payload,
[decreaseBy.TYPE]: (state, {payload}) => state - payload,
}, { defaultState: 100 })
Wo increaseBy
ist eine Funktion, die eine benutzerdefinierte hat toString()
, die auf eine Zeichenfolge aufgelöst wird.
JS translates any key to string mit toString()
so funktioniert es, aber meine Frage ist:
wie sicher ist es?
Technisch ist es in einer ES2015-Umgebung sicher. Sie verlassen sich jetzt jedoch auf die implizite Typenkorrektur. Jeder, der Ihren Code betrachtet, kann nicht sofort erkennen, welche Eigenschaften das Objekt hat. Und betrachte Funktionen ohne eine benutzerdefinierte toString: const id = x => x; o = {[id]: "foo"} ' ergibt' {x => x: "foo"} '. – ftor
Ja, das weiß ich. Wenn Sie sich unsere Bibliothek ansehen, ist das klar aus dem Fluss. Ich ordne nicht einfach eine zufällige Funktion mit benutzerdefiniertem 'toString()' darauf als Objektschlüssel zu :) –