Ich habe einen String-Ausdruck wie: "1+2+3"
, und es muss als Zeichenfolge bleiben. Mit anderen Worten, das Schleifen und Umwandeln der Ziffern zur Ausführung der Operation ist keine Option, daher lautet meine Lösung eval("1+2+3")
. Aber eval()
ist langsam und hat alle diese Probleme damit verbunden. Gibt es eine Alternative, um meine Saite auszuwerten?Gibt es eine eval() Alternative für diesen Ausdruck?
0
A
Antwort
2
Auswerten einer Zeichenfolge ist nicht nur langsam, es ist gefährlich. Was ist, wenn Sie durch Absicht oder Fehler eines böswilligen Benutzers am Ende Code auswerten, der Ihr Programm zum Absturz bringt, Ihre Daten zerstört oder eine Sicherheitslücke öffnet?
Nein, Sie sollten nicht die Zeichenfolge eval()
. Sie sollten es teilen, die Operanden in Zahlen umwandeln und sie summieren.
Sie können die string
halten um, wenn Sie mögen (Sie sagten, Sie die Zeichenfolge erforderlich), aber die string
eigentlich mit dieser Operation auszuführen ist ein wirklich schlechte Idee.
var string = "1+2+3"
var numbers = string.split('+').map(function(x) { return parseInt(x) })
var sum = numbers.reduce(function(total, x) { return total + x }, 0)
0
Dies ist eine dumme Frage:
var reducer = function (a, b) {
return +a + +b;
};
"1+2+3".match(/[+-]?\d+/g).reduce(reducer); // 6
// or addition only
"1+2+3".split(/\D/).reduce(reducer); // 6
Verwandte Themen
- 1. Gibt es eine Möglichkeit, diesen regulären Ausdruck zu verbessern?
- 2. PDFlib für PHP, gibt es eine Alternative
- 3. Gibt es eine SCP-Alternative für PowerShell?
- 4. Gibt es eine Alternative für getRunningTask API
- 5. Gibt es eine suPHP-Alternative?
- 6. Gibt es in Java eine eval() - Funktion?
- 7. Gibt es eine Alternative zu ITScriptNet?
- 8. Alternative zu eval() in JavaScript für eine tiefe Funktion
- 9. Gibt es eine Alternative zu HTML Tidy?
- 10. Gibt es eine Alternative zu Android ViewOverlay?
- 11. Gibt es eine einfache Alternative zu Readline?
- 12. Gibt es eine leichtere Alternative zum Array?
- 13. Javascript - eval() `{}` Ausdruck
- 14. Gibt es eine JavaScript-Alternative zu isNaN()?
- 15. Sensor.TYPE_ROTATION_VECTOR hat Drift: Gibt es eine Alternative?
- 16. Gibt es eine bessere Alternative zu Console.ReadKey()?
- 17. Gibt es eine Alternative zu JavaScript-Schleife?
- 18. Gibt es eine gute Alternative zu WebSVN?
- 19. Gibt es eine bessere Alternative zu CGContext?
- 20. Gibt es eine Alternative zu cushycms?
- 21. Javascript Frontend - Auswerten Zeichenfolge als Ausdruck - Alternative für die Verwendung von eval()
- 22. Gibt es eine Java-Alternative zu Ploehs AutoFixture für .Net?
- 23. Gibt es eine CodeMap-Alternative für Visual Studio Professional
- 24. Gibt es eine Alternative zu rexec für Python-Sandboxing?
- 25. Gibt es eine Alternative zu .htaccess für GitHub Pages?
- 26. Gibt es eine alternative Syntax für typedef-Funktionszeiger?
- 27. Gibt es eine Alternative für vs Nuget Package Manager?
- 28. Gibt es eine Hash :: Util-Alternative für zusammengesetzte Hashes?
- 29. Gibt es eine onBackPressed() Alternative für einen Service?
- 30. Gibt es eine Open-Source-Alternative für StreamBase?
Kann dieser Ausdruck, indem sie zum Beispiel aufgebaut werden, die "1", "2" und "3" als Eingänge? –
Sie könnten Ihren eigenen Parser schreiben, wenn Sie sich mutig fühlen oder etwas auf [NPM] (http://npmjs.com) finden, das es für Sie tut. 'eval' ist nicht langsam. Es ist nur Ärger **. – tadman
Wenn Sie Teile der Zeichenkette nicht zu Nummern loopen können, gibt es keine anderen Optionen, aber das ist was eval hier tut, es bewertet den Ausdruck in der Zeichenkette – adeneo